Skip to content

Commit 4dda2b9

Browse files
client, add validateClient to ClientBuilder (#2783)
1 parent 4fe6c26 commit 4dda2b9

File tree

216 files changed

+1588
-72
lines changed

Some content is hidden

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

216 files changed

+1588
-72
lines changed

azure-dataplane-tests/src/main/java/com/azure/ai/formrecognizer/documentanalysis/dpg/DocumentModelsClientBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ public DocumentModelsClientBuilder retryPolicy(RetryPolicy retryPolicy) {
253253
*/
254254
@Generated
255255
private FormRecognizerClientImpl buildInnerClient() {
256+
this.validateClient();
256257
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
257258
FormRecognizerServiceVersion localServiceVersion
258259
= (serviceVersion != null) ? serviceVersion : FormRecognizerServiceVersion.getLatest();
@@ -261,6 +262,13 @@ private FormRecognizerClientImpl buildInnerClient() {
261262
return client;
262263
}
263264

265+
@Generated
266+
private void validateClient() {
267+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
268+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
269+
Objects.requireNonNull(endpoint, "'endpoint' cannot be null.");
270+
}
271+
264272
@Generated
265273
private HttpPipeline createHttpPipeline() {
266274
Configuration buildConfiguration

azure-dataplane-tests/src/main/java/com/azure/ai/formrecognizer/documentanalysis/dpg/MiscellaneousClientBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ public MiscellaneousClientBuilder retryPolicy(RetryPolicy retryPolicy) {
253253
*/
254254
@Generated
255255
private FormRecognizerClientImpl buildInnerClient() {
256+
this.validateClient();
256257
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
257258
FormRecognizerServiceVersion localServiceVersion
258259
= (serviceVersion != null) ? serviceVersion : FormRecognizerServiceVersion.getLatest();
@@ -261,6 +262,13 @@ private FormRecognizerClientImpl buildInnerClient() {
261262
return client;
262263
}
263264

265+
@Generated
266+
private void validateClient() {
267+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
268+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
269+
Objects.requireNonNull(endpoint, "'endpoint' cannot be null.");
270+
}
271+
264272
@Generated
265273
private HttpPipeline createHttpPipeline() {
266274
Configuration buildConfiguration

azure-dataplane-tests/src/main/java/com/azure/ai/formrecognizer/documentanalysis/implementation/FormRecognizerClientImplBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ public FormRecognizerClientImplBuilder retryPolicy(RetryPolicy retryPolicy) {
267267
*/
268268
@Generated
269269
public FormRecognizerClientImpl buildClient() {
270+
this.validateClient();
270271
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
271272
String localApiVersion = (apiVersion != null) ? apiVersion : "2022-08-31";
272273
SerializerAdapter localSerializerAdapter
@@ -276,6 +277,13 @@ public FormRecognizerClientImpl buildClient() {
276277
return client;
277278
}
278279

280+
@Generated
281+
private void validateClient() {
282+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
283+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
284+
Objects.requireNonNull(endpoint, "'endpoint' cannot be null.");
285+
}
286+
279287
@Generated
280288
private HttpPipeline createHttpPipeline() {
281289
Configuration buildConfiguration

azure-tests/src/main/java/fixtures/azureparametergrouping/AutoRestParameterGroupingTestServiceBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ public AutoRestParameterGroupingTestServiceBuilder retryPolicy(RetryPolicy retry
231231
*/
232232
@Generated
233233
public AutoRestParameterGroupingTestService buildClient() {
234+
this.validateClient();
234235
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
235236
String localHost = (host != null) ? host : "http://localhost:3000";
236237
SerializerAdapter localSerializerAdapter
@@ -240,6 +241,12 @@ public AutoRestParameterGroupingTestService buildClient() {
240241
return client;
241242
}
242243

244+
@Generated
245+
private void validateClient() {
246+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
247+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
248+
}
249+
243250
@Generated
244251
private HttpPipeline createHttpPipeline() {
245252
Configuration buildConfiguration

azure-tests/src/main/java/fixtures/azurereport/AutoRestReportServiceForAzureBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ public AutoRestReportServiceForAzureBuilder retryPolicy(RetryPolicy retryPolicy)
230230
*/
231231
@Generated
232232
public AutoRestReportServiceForAzure buildClient() {
233+
this.validateClient();
233234
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
234235
String localHost = (host != null) ? host : "http://localhost:3000";
235236
SerializerAdapter localSerializerAdapter
@@ -239,6 +240,12 @@ public AutoRestReportServiceForAzure buildClient() {
239240
return client;
240241
}
241242

243+
@Generated
244+
private void validateClient() {
245+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
246+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
247+
}
248+
242249
@Generated
243250
private HttpPipeline createHttpPipeline() {
244251
Configuration buildConfiguration

azure-tests/src/main/java/fixtures/azurespecials/AutoRestAzureSpecialParametersTestClientBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ public AutoRestAzureSpecialParametersTestClientBuilder retryPolicy(RetryPolicy r
269269
*/
270270
@Generated
271271
public AutoRestAzureSpecialParametersTestClient buildClient() {
272+
this.validateClient();
272273
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
273274
String localHost = (host != null) ? host : "http://localhost:3000";
274275
String localApiVersion = (apiVersion != null) ? apiVersion : "2015-07-01-preview";
@@ -279,6 +280,13 @@ public AutoRestAzureSpecialParametersTestClient buildClient() {
279280
return client;
280281
}
281282

283+
@Generated
284+
private void validateClient() {
285+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
286+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
287+
Objects.requireNonNull(subscriptionId, "'subscriptionId' cannot be null.");
288+
}
289+
282290
@Generated
283291
private HttpPipeline createHttpPipeline() {
284292
Configuration buildConfiguration

azure-tests/src/main/java/fixtures/custombaseuri/paging/AutoRestParameterizedHostTestPagingClientBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ public AutoRestParameterizedHostTestPagingClientBuilder retryPolicy(RetryPolicy
231231
*/
232232
@Generated
233233
public AutoRestParameterizedHostTestPagingClient buildClient() {
234+
this.validateClient();
234235
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
235236
String localHost = (host != null) ? host : "host";
236237
SerializerAdapter localSerializerAdapter
@@ -240,6 +241,12 @@ public AutoRestParameterizedHostTestPagingClient buildClient() {
240241
return client;
241242
}
242243

244+
@Generated
245+
private void validateClient() {
246+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
247+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
248+
}
249+
243250
@Generated
244251
private HttpPipeline createHttpPipeline() {
245252
Configuration buildConfiguration

azure-tests/src/main/java/fixtures/paging/AutoRestPagingTestServiceBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ public AutoRestPagingTestServiceBuilder retryPolicy(RetryPolicy retryPolicy) {
250250
*/
251251
@Generated
252252
private AutoRestPagingTestServiceImpl buildInnerClient() {
253+
this.validateClient();
253254
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
254255
String localHost = (host != null) ? host : "http://localhost:3000";
255256
String localApiVersion = (apiVersion != null) ? apiVersion : "1.0.0";
@@ -260,6 +261,12 @@ private AutoRestPagingTestServiceImpl buildInnerClient() {
260261
return client;
261262
}
262263

264+
@Generated
265+
private void validateClient() {
266+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
267+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
268+
}
269+
263270
@Generated
264271
private HttpPipeline createHttpPipeline() {
265272
Configuration buildConfiguration

azure-tests/src/main/java/fixtures/subscriptionidapiversion/MicrosoftAzureTestUrlBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ public MicrosoftAzureTestUrlBuilder retryPolicy(RetryPolicy retryPolicy) {
266266
*/
267267
@Generated
268268
public MicrosoftAzureTestUrl buildClient() {
269+
this.validateClient();
269270
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
270271
String localHost = (host != null) ? host : "http://localhost:3000";
271272
String localApiVersion = (apiVersion != null) ? apiVersion : "2014-04-01-preview";
@@ -276,6 +277,13 @@ public MicrosoftAzureTestUrl buildClient() {
276277
return client;
277278
}
278279

280+
@Generated
281+
private void validateClient() {
282+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
283+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
284+
Objects.requireNonNull(subscriptionId, "'subscriptionId' cannot be null.");
285+
}
286+
279287
@Generated
280288
private HttpPipeline createHttpPipeline() {
281289
Configuration buildConfiguration

azure-tests/src/test/java/fixtures/azurespecials/AzureSpecialParametersTests.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,7 @@
77

88
import com.azure.core.exception.HttpResponseException;
99
import com.azure.core.http.HttpHeaders;
10-
import com.azure.core.http.HttpPipeline;
11-
import com.azure.core.http.HttpPipelineBuilder;
1210
import com.azure.core.http.policy.AddHeadersFromContextPolicy;
13-
import com.azure.core.http.policy.CookiePolicy;
14-
import com.azure.core.http.policy.RetryPolicy;
15-
import com.azure.core.http.policy.UserAgentPolicy;
1611
import com.azure.core.util.Context;
1712
import fixtures.azurespecials.models.HeaderCustomNamedRequestIdParamGroupingParameters;
1813
import fixtures.azurespecials.models.HeadersCustomNamedRequestIdHeadResponse;
@@ -35,20 +30,14 @@ public class AzureSpecialParametersTests {
3530

3631
@BeforeAll
3732
public static void setup() {
38-
HttpPipeline pipeline = new HttpPipelineBuilder().policies(new UserAgentPolicy(),
39-
new AddHeadersFromContextPolicy(),
40-
new RetryPolicy(),
41-
new CookiePolicy()
42-
//, new HttpLoggingPolicy(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
43-
).build();
44-
4533
client = new AutoRestAzureSpecialParametersTestClientBuilder()
46-
.pipeline(pipeline)
34+
.addPolicy(new AddHeadersFromContextPolicy())
4735
.subscriptionId("1234-5678-9012-3456")
4836
.buildClient();
4937

5038
clientNoSubscription = new AutoRestAzureSpecialParametersTestClientBuilder()
51-
.pipeline(pipeline)
39+
.addPolicy(new AddHeadersFromContextPolicy())
40+
.subscriptionId("")
5241
.buildClient();
5342
}
5443

@@ -59,7 +48,7 @@ public void get() {
5948

6049
@Test
6150
public void getOverwriteNull() {
62-
client.getXMsClientRequestIds().getWithResponse(new Context("azure-http-headers-key", new HttpHeaders(Collections.singletonMap("x-ms-client-request-id", null))));
51+
Assertions.assertThrows(HttpResponseException.class, () -> client.getXMsClientRequestIds().getWithResponse(new Context("azure-http-headers-key", new HttpHeaders(Collections.singletonMap("x-ms-client-request-id", null)))));
6352
}
6453

6554
@Test
@@ -79,7 +68,10 @@ public void postMethodGlobalValid() {
7968

8069
@Test
8170
public void postMethodGlobalNull() {
82-
Assertions.assertThrows(IllegalArgumentException.class, () -> clientNoSubscription.getSubscriptionInCredentials().postMethodGlobalNull());
71+
Assertions.assertThrows(RuntimeException.class, () -> new AutoRestAzureSpecialParametersTestClientBuilder()
72+
.addPolicy(new AddHeadersFromContextPolicy())
73+
.buildClient()
74+
.getSubscriptionInCredentials().postMethodGlobalNull());
8375
}
8476

8577
@Test

customization-tests/src/main/java/fixtures/bodycomplex/AutoRestComplexTestServiceBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ public AutoRestComplexTestServiceBuilder retryPolicy(RetryPolicy retryPolicy) {
268268
*/
269269
@Generated
270270
private AutoRestComplexTestServiceImpl buildInnerClient() {
271+
this.validateClient();
271272
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
272273
String localHost = (host != null) ? host : "http://localhost:3000";
273274
String localApiVersion = (apiVersion != null) ? apiVersion : "2016-02-29";
@@ -278,6 +279,12 @@ private AutoRestComplexTestServiceImpl buildInnerClient() {
278279
return client;
279280
}
280281

282+
@Generated
283+
private void validateClient() {
284+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
285+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
286+
}
287+
281288
@Generated
282289
private HttpPipeline createHttpPipeline() {
283290
Configuration buildConfiguration

javagen/src/main/java/com/azure/autorest/template/ServiceClientBuilderTemplate.java

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.azure.autorest.model.clientmodel.AsyncSyncClient;
1111
import com.azure.autorest.model.clientmodel.ClassType;
1212
import com.azure.autorest.model.clientmodel.ClientBuilder;
13+
import com.azure.autorest.model.clientmodel.ClientBuilderTrait;
1314
import com.azure.autorest.model.clientmodel.ClientBuilderTraitMethod;
1415
import com.azure.autorest.model.clientmodel.PipelinePolicyDetails;
1516
import com.azure.autorest.model.clientmodel.PrimitiveType;
@@ -249,24 +250,19 @@ public final void write(ClientBuilder clientBuilder, JavaFile javaFile) {
249250
JavaVisibility visibility = settings.isGenerateSyncAsyncClients() ? JavaVisibility.Private : JavaVisibility.Public;
250251

251252
// build method
252-
classBlock.javadocComment(comment ->
253-
{
253+
classBlock.javadocComment(comment -> {
254254
comment.description(String.format("Builds an instance of %1$s with the provided parameters", buildReturnType));
255255
comment.methodReturns(String.format("an instance of %1$s", buildReturnType));
256256
});
257257
addGeneratedAnnotation(classBlock);
258-
classBlock.method(visibility, null, String.format("%1$s %2$s()", buildReturnType, buildMethodName), function ->
259-
{
260-
List<ServiceClientProperty> allProperties = new ArrayList<>();
258+
classBlock.method(visibility, null, String.format("%1$s %2$s()", buildReturnType, buildMethodName), function -> {
261259
if (!settings.isAzureOrFluent()) {
262-
allProperties.addAll(clientBuilder.getBuilderTraits()
263-
.stream()
264-
.flatMap(trait -> trait.getTraitMethods().stream())
265-
.map(ClientBuilderTraitMethod::getProperty)
266-
.filter(Objects::nonNull)
267-
.collect(Collectors.toList()));
260+
function.line("this.validateClient();");
268261
}
269-
allProperties.addAll(clientProperties);
262+
263+
List<ServiceClientProperty> allProperties = mergeClientPropertiesWithTraits(
264+
clientProperties,
265+
settings.isAzureOrFluent() ? null : clientBuilder.getBuilderTraits());
270266

271267
for (ServiceClientProperty serviceClientProperty : allProperties) {
272268
if (serviceClientProperty.getDefaultValueExpression() != null
@@ -277,7 +273,6 @@ public final void write(ClientBuilder clientBuilder, JavaFile javaFile) {
277273
serviceClientProperty.getName(),
278274
serviceClientProperty.getName(),
279275
serviceClientProperty.getDefaultValueExpression()));
280-
281276
}
282277
}
283278

@@ -323,6 +318,9 @@ public final void write(ClientBuilder clientBuilder, JavaFile javaFile) {
323318
});
324319

325320
if (!settings.isAzureOrFluent()) {
321+
List<ServiceClientProperty> allProperties = mergeClientPropertiesWithTraits(clientProperties, clientBuilder.getBuilderTraits());
322+
addValidateClientMethod(classBlock, allProperties);
323+
326324
addCreateHttpPipelineMethod(settings, classBlock, serviceClient.getDefaultCredentialScopes(), serviceClient.getSecurityInfo(), serviceClient.getPipelinePolicyDetails());
327325
}
328326

@@ -336,6 +334,22 @@ public final void write(ClientBuilder clientBuilder, JavaFile javaFile) {
336334
});
337335
}
338336

337+
private static List<ServiceClientProperty> mergeClientPropertiesWithTraits(
338+
List<ServiceClientProperty> clientProperties, List<ClientBuilderTrait> builderTraits) {
339+
340+
List<com.azure.autorest.model.clientmodel.ServiceClientProperty> allProperties = new ArrayList<>();
341+
if (builderTraits != null) {
342+
allProperties.addAll(builderTraits
343+
.stream()
344+
.flatMap(trait -> trait.getTraitMethods().stream())
345+
.map(ClientBuilderTraitMethod::getProperty)
346+
.filter(Objects::nonNull)
347+
.collect(Collectors.toList()));
348+
}
349+
allProperties.addAll(clientProperties);
350+
return allProperties;
351+
}
352+
339353
private void addBuildAsyncClientMethods(ClientBuilder clientBuilder, List<AsyncSyncClient> asyncClients, JavaClass classBlock, String buildMethodName) {
340354
for (AsyncSyncClient asyncClient : asyncClients) {
341355
final boolean wrapServiceClient = asyncClient.getMethodGroupClient() == null;
@@ -516,6 +530,20 @@ protected void addCreateHttpPipelineMethod(JavaSettings settings, JavaClass clas
516530
});
517531
}
518532

533+
private void addValidateClientMethod(JavaClass classBlock, List<ServiceClientProperty> properties) {
534+
addGeneratedAnnotation(classBlock);
535+
classBlock.privateMethod("void validateClient()", methodBlock -> {
536+
methodBlock.line("// This method is invoked from 'buildInnerClient'/'buildClient' method.");
537+
methodBlock.line("// Developer can customize this method, to validate that the necessary conditions are met for the new client.");
538+
for (ServiceClientProperty property : properties) {
539+
// property have a default value would have a "local<PropertyName>" for the initialization of client
540+
if (property.isRequired() && property.getDefaultValueExpression() == null) {
541+
methodBlock.line("Objects.requireNonNull(" + property.getName() + ", \"'" + property.getName() + "' cannot be null.\");");
542+
}
543+
}
544+
});
545+
}
546+
519547
protected ArrayList<ServiceClientProperty> addCommonClientProperties(JavaSettings settings, SecurityInfo securityInfo) {
520548
ArrayList<ServiceClientProperty> commonProperties = new ArrayList<ServiceClientProperty>();
521549
if (settings.isAzureOrFluent()) {

partial-update-tests/generated/src/main/java/fixtures/bodystring/AutoRestSwaggerBatServiceClientBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ public AutoRestSwaggerBatServiceClientBuilder retryPolicy(RetryPolicy retryPolic
220220
*/
221221
@Generated
222222
private AutoRestSwaggerBatServiceClientImpl buildInnerClient() {
223+
this.validateClient();
223224
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
224225
String localHost = (host != null) ? host : "http://localhost:3000";
225226
AutoRestSwaggerBatServiceVersion localServiceVersion
@@ -322,5 +323,11 @@ public AutoRestSwaggerBatServiceClientBuilder serviceVersion(AutoRestSwaggerBatS
322323
return this;
323324
}
324325

326+
@Generated
327+
private void validateClient() {
328+
// This method is invoked from 'buildInnerClient'/'buildClient' method.
329+
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
330+
}
331+
325332
private static final ClientLogger LOGGER = new ClientLogger(AutoRestSwaggerBatServiceClientBuilder.class);
326333
}

0 commit comments

Comments
 (0)