55import com .azure .autorest .customization .Customization ;
66import com .azure .autorest .customization .LibraryCustomization ;
77import com .azure .autorest .customization .PackageCustomization ;
8- import com .github .javaparser .ast .body .ClassOrInterfaceDeclaration ;
9- import com .github .javaparser .ast .body .TypeDeclaration ;
10- import com .github .javaparser .ast .stmt .BlockStmt ;
8+ import com .github .javaparser .StaticJavaParser ;
9+ import com .github .javaparser .ast .CompilationUnit ;
10+ import com .github .javaparser .ast .NodeList ;
11+ import com .github .javaparser .ast .expr .Name ;
12+ import com .github .javaparser .ast .modules .ModuleExportsDirective ;
13+ import com .github .javaparser .ast .modules .ModuleOpensDirective ;
14+ import com .github .javaparser .ast .modules .ModuleRequiresDirective ;
15+ import com .github .javaparser .javadoc .Javadoc ;
16+ import com .github .javaparser .javadoc .description .JavadocDescription ;
1117import org .slf4j .Logger ;
1218
13- import java .util .function .Consumer ;
14-
1519/**
1620 * Customization class for Monitor. These customizations will be applied on top of the generated code.
1721 */
@@ -33,7 +37,26 @@ public class MonitorIngestionCustomizations extends Customization {
3337 */
3438 @ Override
3539 public void customize (LibraryCustomization libraryCustomization , Logger logger ) {
36- monitorIngestionImplementation (libraryCustomization .getPackage ("com.azure.monitor.ingestion.implementation" ), logger );
40+ monitorIngestionImplementation (libraryCustomization .getPackage ("com.azure.monitor.ingestion.implementation" ));
41+ CompilationUnit moduleInfo = StaticJavaParser .parse (libraryCustomization .getRawEditor ()
42+ .getFileContent ("src/main/java/module-info.java" ));
43+ moduleInfo .getModule ()
44+ .ifPresent (module -> {
45+ module .setName ("com.azure.monitor.ingestion" );
46+ module .setDirectives (new NodeList <>(
47+ new ModuleRequiresDirective ().setTransitive (true ).setName ("com.azure.core" ),
48+ new ModuleExportsDirective ().setName ("com.azure.monitor.ingestion" ),
49+ new ModuleExportsDirective ().setName ("com.azure.monitor.ingestion.models" ),
50+ new ModuleOpensDirective ().setName ("com.azure.monitor.ingestion" )
51+ .setModuleNames (new NodeList <>(new Name ("com.azure.core" )))));
52+ });
53+
54+ libraryCustomization .getRawEditor ()
55+ .replaceFile ("src/main/java/module-info.java" ,
56+ "// Copyright (c) Microsoft Corporation. All rights reserved.\n "
57+ + "// Licensed under the MIT License.\n "
58+ + "// Code generated by Microsoft (R) AutoRest Code Generator.\n \n "
59+ + moduleInfo );
3760 }
3861
3962 /**
@@ -47,10 +70,9 @@ public void customize(LibraryCustomization libraryCustomization, Logger logger)
4770 * </ol>
4871 *
4972 * @param packageCustomization The package customization.
50- * @param logger The logger.
5173 */
52- private void monitorIngestionImplementation (PackageCustomization packageCustomization , Logger logger ) {
53- IngestionUsingDataCollectionRulesClientBuilderCustomization (packageCustomization .getClass ("IngestionUsingDataCollectionRulesClientBuilder" ), logger );
74+ private void monitorIngestionImplementation (PackageCustomization packageCustomization ) {
75+ IngestionUsingDataCollectionRulesClientBuilderCustomization (packageCustomization .getClass ("IngestionUsingDataCollectionRulesClientBuilder" ));
5476 }
5577
5678 /**
@@ -73,78 +95,64 @@ private void monitorIngestionImplementation(PackageCustomization packageCustomiz
7395 * </ol>
7496 *
7597 * @param classCustomization The class customization.
76- * @param logger The logger.
7798 */
78- private void IngestionUsingDataCollectionRulesClientBuilderCustomization (ClassCustomization classCustomization , Logger logger ) {
79- classCustomization .addImports ("com.azure.monitor.ingestion.models.LogsIngestionAudience" );
99+ private void IngestionUsingDataCollectionRulesClientBuilderCustomization (ClassCustomization classCustomization ) {
100+ classCustomization .customizeAst (ast -> {
101+ ast .addImport ("com.azure.monitor.ingestion.models.LogsIngestionAudience" );
102+ ast .getClassByName (classCustomization .getClassName ()).ifPresent (clazz -> {
103+ clazz .addPrivateField ("LogsIngestionAudience" , "audience" )
104+ .addAnnotation ("Generated" )
105+ .setJavadocComment ("The audience indicating the authorization scope of log ingestion clients." )
106+ .createSetter ()
107+ .setName ("audience" )
108+ .setType ("IngestionUsingDataCollectionRulesClientBuilder" )
109+ .setBody (StaticJavaParser .parseBlock ("{this.audience = audience; return this; }" ))
110+ .addAnnotation ("Generated" )
111+ .setJavadocComment (new Javadoc (JavadocDescription .parseText ("Sets the audience." ))
112+ .addBlockTag ("param" , "audience" , "the audience indicating the authorization scope of log ingestion clients." )
113+ .addBlockTag ("return" , "the IngestionUsingDataCollectionRulesClientBuilder." ));
80114
81-
82-
83- customizeAst (classCustomization , clazz -> {
84- clazz .addPrivateField ("LogsIngestionAudience" , "audience" )
85- .addAnnotation ("Generated" )
86- .setJavadocComment ("The audience indicating the authorization scope of log ingestion clients." )
87- .createSetter ()
88- .setName ("audience" )
89- .setType ("IngestionUsingDataCollectionRulesClientBuilder" )
90- .setBody (new BlockStmt ()
91- .addStatement ("this.audience = audience;" )
92- .addStatement ("return this;" ))
93- .addAnnotation ("Generated" )
94- .setJavadocComment ("Sets The audience.\n " +
95- " *\n " +
96- " * @param audience the audience indicating the authorization scope of log ingestion clients.\n " +
97- " * @return the IngestionUsingDataCollectionRulesClientBuilder." );
115+ clazz .getMethodsByName ("createHttpPipeline" ).get (0 ).setBody (StaticJavaParser .parseBlock (
116+ String .join ("\n " ,
117+ "{" ,
118+ "Configuration buildConfiguration" ,
119+ " = (configuration == null) ? Configuration.getGlobalConfiguration() : configuration;" ,
120+ "HttpLogOptions localHttpLogOptions = this.httpLogOptions == null ? new HttpLogOptions() : this.httpLogOptions;" ,
121+ "ClientOptions localClientOptions = this.clientOptions == null ? new ClientOptions() : this.clientOptions;" ,
122+ "List<HttpPipelinePolicy> policies = new ArrayList<>();" ,
123+ "String clientName = PROPERTIES.getOrDefault(SDK_NAME, \" UnknownName\" );" ,
124+ "String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, \" UnknownVersion\" );" ,
125+ "String applicationId = CoreUtils.getApplicationId(localClientOptions, localHttpLogOptions);" ,
126+ "policies.add(new UserAgentPolicy(applicationId, clientName, clientVersion, buildConfiguration));" ,
127+ "policies.add(new RequestIdPolicy());" ,
128+ "policies.add(new AddHeadersFromContextPolicy());" ,
129+ "HttpHeaders headers = CoreUtils.createHttpHeadersFromClientOptions(localClientOptions);" ,
130+ "if (headers != null) {" ,
131+ " policies.add(new AddHeadersPolicy(headers));" ,
132+ "}" ,
133+ "this.pipelinePolicies.stream()" ,
134+ " .filter(p -> p.getPipelinePosition() == HttpPipelinePosition.PER_CALL)" ,
135+ " .forEach(p -> policies.add(p));" ,
136+ "HttpPolicyProviders.addBeforeRetryPolicies(policies);" ,
137+ "policies.add(ClientBuilderUtil.validateAndGetRetryPolicy(retryPolicy, retryOptions, new RetryPolicy()));" ,
138+ "policies.add(new AddDatePolicy());" ,
139+ "if (tokenCredential != null) {" ,
140+ " policies.add(new BearerTokenAuthenticationPolicy(tokenCredential, audience == null ? DEFAULT_SCOPES : new String[] { audience.toString() }));" ,
141+ "}" ,
142+ "this.pipelinePolicies.stream()" ,
143+ " .filter(p -> p.getPipelinePosition() == HttpPipelinePosition.PER_RETRY)" ,
144+ " .forEach(p -> policies.add(p));" ,
145+ "HttpPolicyProviders.addAfterRetryPolicies(policies);" ,
146+ "policies.add(new HttpLoggingPolicy(localHttpLogOptions));" ,
147+ "HttpPipeline httpPipeline = new HttpPipelineBuilder().policies(policies.toArray(new HttpPipelinePolicy[0]))" ,
148+ " .httpClient(httpClient)" ,
149+ " .clientOptions(localClientOptions)" ,
150+ " .build();" ,
151+ "return httpPipeline;" ,
152+ "}"
153+ )
154+ ));
155+ });
98156 });
99-
100-
101- classCustomization .getMethod ("createHttpPipeline" ).replaceBody ("Configuration buildConfiguration\n " +
102- " = (configuration == null) ? Configuration.getGlobalConfiguration() : configuration;\n " +
103- " HttpLogOptions localHttpLogOptions = this.httpLogOptions == null ? new HttpLogOptions() : this.httpLogOptions;\n " +
104- " ClientOptions localClientOptions = this.clientOptions == null ? new ClientOptions() : this.clientOptions;\n " +
105- " List<HttpPipelinePolicy> policies = new ArrayList<>();\n " +
106- " String clientName = PROPERTIES.getOrDefault(SDK_NAME, \" UnknownName\" );\n " +
107- " String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, \" UnknownVersion\" );\n " +
108- " String applicationId = CoreUtils.getApplicationId(localClientOptions, localHttpLogOptions);\n " +
109- " policies.add(new UserAgentPolicy(applicationId, clientName, clientVersion, buildConfiguration));\n " +
110- " policies.add(new RequestIdPolicy());\n " +
111- " policies.add(new AddHeadersFromContextPolicy());\n " +
112- " HttpHeaders headers = new HttpHeaders();\n " +
113- " localClientOptions.getHeaders()\n " +
114- " .forEach(header -> headers.set(HttpHeaderName.fromString(header.getName()), header.getValue()));\n " +
115- " if (headers.getSize() > 0) {\n " +
116- " policies.add(new AddHeadersPolicy(headers));\n " +
117- " }\n " +
118- " this.pipelinePolicies.stream()\n " +
119- " .filter(p -> p.getPipelinePosition() == HttpPipelinePosition.PER_CALL)\n " +
120- " .forEach(p -> policies.add(p));\n " +
121- " HttpPolicyProviders.addBeforeRetryPolicies(policies);\n " +
122- " policies.add(ClientBuilderUtil.validateAndGetRetryPolicy(retryPolicy, retryOptions, new RetryPolicy()));\n " +
123- " policies.add(new AddDatePolicy());\n " +
124- " if (tokenCredential != null) {\n " +
125- " policies.add(new BearerTokenAuthenticationPolicy(tokenCredential, audience == null ? DEFAULT_SCOPES : new String[] { audience.toString() }));\n " +
126- " }\n " +
127- " this.pipelinePolicies.stream()\n " +
128- " .filter(p -> p.getPipelinePosition() == HttpPipelinePosition.PER_RETRY)\n " +
129- " .forEach(p -> policies.add(p));\n " +
130- " HttpPolicyProviders.addAfterRetryPolicies(policies);\n " +
131- " policies.add(new HttpLoggingPolicy(localHttpLogOptions));\n " +
132- " HttpPipeline httpPipeline = new HttpPipelineBuilder().policies(policies.toArray(new HttpPipelinePolicy[0]))\n " +
133- " .httpClient(httpClient)\n " +
134- " .clientOptions(localClientOptions)\n " +
135- " .build();\n " +
136- " return httpPipeline;" );
137-
138- }
139-
140-
141- /**
142- * Customizes the abstract syntax tree of a class.
143- * @param classCustomization The class customization.
144- * @param consumer The consumer.
145- */
146- private static void customizeAst (ClassCustomization classCustomization , Consumer <ClassOrInterfaceDeclaration > consumer ) {
147- classCustomization .customizeAst (ast -> consumer .accept (ast .getClassByName (classCustomization .getClassName ())
148- .orElseThrow (() -> new RuntimeException ("Class not found. " + classCustomization .getClassName ()))));
149157 }
150158}
0 commit comments