-
Notifications
You must be signed in to change notification settings - Fork 375
[http-client-java] multiple resource puts under the same collection, fix picking order #9302
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
282 changes: 282 additions & 0 deletions
282
...enerator/http-client-generator-test/src/main/java/tsptest/armlegacy/ArmLegacyManager.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,282 @@ | ||
| // Copyright (c) Microsoft Corporation. All rights reserved. | ||
| // Licensed under the MIT License. | ||
| // Code generated by Microsoft (R) TypeSpec Code Generator. | ||
|
|
||
| package tsptest.armlegacy; | ||
|
|
||
| import com.azure.core.credential.TokenCredential; | ||
| import com.azure.core.http.HttpClient; | ||
| import com.azure.core.http.HttpPipeline; | ||
| import com.azure.core.http.HttpPipelineBuilder; | ||
| import com.azure.core.http.HttpPipelinePosition; | ||
| import com.azure.core.http.policy.AddDatePolicy; | ||
| import com.azure.core.http.policy.AddHeadersFromContextPolicy; | ||
| import com.azure.core.http.policy.BearerTokenAuthenticationPolicy; | ||
| import com.azure.core.http.policy.HttpLogOptions; | ||
| import com.azure.core.http.policy.HttpLoggingPolicy; | ||
| import com.azure.core.http.policy.HttpPipelinePolicy; | ||
| import com.azure.core.http.policy.HttpPolicyProviders; | ||
| import com.azure.core.http.policy.RequestIdPolicy; | ||
| import com.azure.core.http.policy.RetryOptions; | ||
| import com.azure.core.http.policy.RetryPolicy; | ||
| import com.azure.core.http.policy.UserAgentPolicy; | ||
| import com.azure.core.management.profile.AzureProfile; | ||
| import com.azure.core.util.Configuration; | ||
| import com.azure.core.util.CoreUtils; | ||
| import com.azure.core.util.logging.ClientLogger; | ||
| import java.time.Duration; | ||
| import java.time.temporal.ChronoUnit; | ||
| import java.util.ArrayList; | ||
| import java.util.List; | ||
| import java.util.Map; | ||
| import java.util.Objects; | ||
| import java.util.stream.Collectors; | ||
| import tsptest.armlegacy.fluent.ArmLegacyClient; | ||
| import tsptest.armlegacy.implementation.ArmLegacyClientBuilder; | ||
| import tsptest.armlegacy.implementation.SkusImpl; | ||
| import tsptest.armlegacy.models.Skus; | ||
|
|
||
| /** | ||
| * Entry point to ArmLegacyManager. | ||
| * Arm Resource Provider management API. | ||
| */ | ||
| public final class ArmLegacyManager { | ||
| private Skus skus; | ||
|
|
||
| private final ArmLegacyClient clientObject; | ||
|
|
||
| private ArmLegacyManager(HttpPipeline httpPipeline, AzureProfile profile, Duration defaultPollInterval) { | ||
| Objects.requireNonNull(httpPipeline, "'httpPipeline' cannot be null."); | ||
| Objects.requireNonNull(profile, "'profile' cannot be null."); | ||
| this.clientObject = new ArmLegacyClientBuilder().pipeline(httpPipeline) | ||
| .endpoint(profile.getEnvironment().getResourceManagerEndpoint()) | ||
| .subscriptionId(profile.getSubscriptionId()) | ||
| .defaultPollInterval(defaultPollInterval) | ||
| .buildClient(); | ||
| } | ||
|
|
||
| /** | ||
| * Creates an instance of ArmLegacy service API entry point. | ||
| * | ||
| * @param credential the credential to use. | ||
| * @param profile the Azure profile for client. | ||
| * @return the ArmLegacy service API instance. | ||
| */ | ||
| public static ArmLegacyManager authenticate(TokenCredential credential, AzureProfile profile) { | ||
| Objects.requireNonNull(credential, "'credential' cannot be null."); | ||
| Objects.requireNonNull(profile, "'profile' cannot be null."); | ||
| return configure().authenticate(credential, profile); | ||
| } | ||
|
|
||
| /** | ||
| * Creates an instance of ArmLegacy service API entry point. | ||
| * | ||
| * @param httpPipeline the {@link HttpPipeline} configured with Azure authentication credential. | ||
| * @param profile the Azure profile for client. | ||
| * @return the ArmLegacy service API instance. | ||
| */ | ||
| public static ArmLegacyManager authenticate(HttpPipeline httpPipeline, AzureProfile profile) { | ||
| Objects.requireNonNull(httpPipeline, "'httpPipeline' cannot be null."); | ||
| Objects.requireNonNull(profile, "'profile' cannot be null."); | ||
| return new ArmLegacyManager(httpPipeline, profile, null); | ||
| } | ||
|
|
||
| /** | ||
| * Gets a Configurable instance that can be used to create ArmLegacyManager with optional configuration. | ||
| * | ||
| * @return the Configurable instance allowing configurations. | ||
| */ | ||
| public static Configurable configure() { | ||
| return new ArmLegacyManager.Configurable(); | ||
| } | ||
|
|
||
| /** | ||
| * The Configurable allowing configurations to be set. | ||
| */ | ||
| public static final class Configurable { | ||
| private static final ClientLogger LOGGER = new ClientLogger(Configurable.class); | ||
| private static final String SDK_VERSION = "version"; | ||
| private static final Map<String, String> PROPERTIES | ||
| = CoreUtils.getProperties("azure-resourcemanager-armlegacy-generated.properties"); | ||
|
|
||
| private HttpClient httpClient; | ||
| private HttpLogOptions httpLogOptions; | ||
| private final List<HttpPipelinePolicy> policies = new ArrayList<>(); | ||
| private final List<String> scopes = new ArrayList<>(); | ||
| private RetryPolicy retryPolicy; | ||
| private RetryOptions retryOptions; | ||
| private Duration defaultPollInterval; | ||
|
|
||
| private Configurable() { | ||
| } | ||
|
|
||
| /** | ||
| * Sets the http client. | ||
| * | ||
| * @param httpClient the HTTP client. | ||
| * @return the configurable object itself. | ||
| */ | ||
| public Configurable withHttpClient(HttpClient httpClient) { | ||
| this.httpClient = Objects.requireNonNull(httpClient, "'httpClient' cannot be null."); | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Sets the logging options to the HTTP pipeline. | ||
| * | ||
| * @param httpLogOptions the HTTP log options. | ||
| * @return the configurable object itself. | ||
| */ | ||
| public Configurable withLogOptions(HttpLogOptions httpLogOptions) { | ||
| this.httpLogOptions = Objects.requireNonNull(httpLogOptions, "'httpLogOptions' cannot be null."); | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Adds the pipeline policy to the HTTP pipeline. | ||
| * | ||
| * @param policy the HTTP pipeline policy. | ||
| * @return the configurable object itself. | ||
| */ | ||
| public Configurable withPolicy(HttpPipelinePolicy policy) { | ||
| this.policies.add(Objects.requireNonNull(policy, "'policy' cannot be null.")); | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Adds the scope to permission sets. | ||
| * | ||
| * @param scope the scope. | ||
| * @return the configurable object itself. | ||
| */ | ||
| public Configurable withScope(String scope) { | ||
| this.scopes.add(Objects.requireNonNull(scope, "'scope' cannot be null.")); | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Sets the retry policy to the HTTP pipeline. | ||
| * | ||
| * @param retryPolicy the HTTP pipeline retry policy. | ||
| * @return the configurable object itself. | ||
| */ | ||
| public Configurable withRetryPolicy(RetryPolicy retryPolicy) { | ||
| this.retryPolicy = Objects.requireNonNull(retryPolicy, "'retryPolicy' cannot be null."); | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Sets the retry options for the HTTP pipeline retry policy. | ||
| * <p> | ||
| * This setting has no effect, if retry policy is set via {@link #withRetryPolicy(RetryPolicy)}. | ||
| * | ||
| * @param retryOptions the retry options for the HTTP pipeline retry policy. | ||
| * @return the configurable object itself. | ||
| */ | ||
| public Configurable withRetryOptions(RetryOptions retryOptions) { | ||
| this.retryOptions = Objects.requireNonNull(retryOptions, "'retryOptions' cannot be null."); | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Sets the default poll interval, used when service does not provide "Retry-After" header. | ||
| * | ||
| * @param defaultPollInterval the default poll interval. | ||
| * @return the configurable object itself. | ||
| */ | ||
| public Configurable withDefaultPollInterval(Duration defaultPollInterval) { | ||
| this.defaultPollInterval | ||
| = Objects.requireNonNull(defaultPollInterval, "'defaultPollInterval' cannot be null."); | ||
| if (this.defaultPollInterval.isNegative()) { | ||
| throw LOGGER | ||
| .logExceptionAsError(new IllegalArgumentException("'defaultPollInterval' cannot be negative")); | ||
| } | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Creates an instance of ArmLegacy service API entry point. | ||
| * | ||
| * @param credential the credential to use. | ||
| * @param profile the Azure profile for client. | ||
| * @return the ArmLegacy service API instance. | ||
| */ | ||
| public ArmLegacyManager authenticate(TokenCredential credential, AzureProfile profile) { | ||
| Objects.requireNonNull(credential, "'credential' cannot be null."); | ||
| Objects.requireNonNull(profile, "'profile' cannot be null."); | ||
|
|
||
| String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion"); | ||
|
|
||
| StringBuilder userAgentBuilder = new StringBuilder(); | ||
| userAgentBuilder.append("azsdk-java") | ||
| .append("-") | ||
| .append("tsptest.armlegacy") | ||
| .append("/") | ||
| .append(clientVersion); | ||
| if (!Configuration.getGlobalConfiguration().get("AZURE_TELEMETRY_DISABLED", false)) { | ||
| userAgentBuilder.append(" (") | ||
| .append(Configuration.getGlobalConfiguration().get("java.version")) | ||
| .append("; ") | ||
| .append(Configuration.getGlobalConfiguration().get("os.name")) | ||
| .append("; ") | ||
| .append(Configuration.getGlobalConfiguration().get("os.version")) | ||
| .append("; auto-generated)"); | ||
| } else { | ||
| userAgentBuilder.append(" (auto-generated)"); | ||
| } | ||
|
|
||
| if (scopes.isEmpty()) { | ||
| scopes.add(profile.getEnvironment().getManagementEndpoint() + "/.default"); | ||
| } | ||
| if (retryPolicy == null) { | ||
| if (retryOptions != null) { | ||
| retryPolicy = new RetryPolicy(retryOptions); | ||
| } else { | ||
| retryPolicy = new RetryPolicy("Retry-After", ChronoUnit.SECONDS); | ||
| } | ||
| } | ||
| List<HttpPipelinePolicy> policies = new ArrayList<>(); | ||
| policies.add(new UserAgentPolicy(userAgentBuilder.toString())); | ||
| policies.add(new AddHeadersFromContextPolicy()); | ||
| policies.add(new RequestIdPolicy()); | ||
| policies.addAll(this.policies.stream() | ||
| .filter(p -> p.getPipelinePosition() == HttpPipelinePosition.PER_CALL) | ||
| .collect(Collectors.toList())); | ||
| HttpPolicyProviders.addBeforeRetryPolicies(policies); | ||
| policies.add(retryPolicy); | ||
| policies.add(new AddDatePolicy()); | ||
| policies.add(new BearerTokenAuthenticationPolicy(credential, scopes.toArray(new String[0]))); | ||
| policies.addAll(this.policies.stream() | ||
| .filter(p -> p.getPipelinePosition() == HttpPipelinePosition.PER_RETRY) | ||
| .collect(Collectors.toList())); | ||
| HttpPolicyProviders.addAfterRetryPolicies(policies); | ||
| policies.add(new HttpLoggingPolicy(httpLogOptions)); | ||
| HttpPipeline httpPipeline = new HttpPipelineBuilder().httpClient(httpClient) | ||
| .policies(policies.toArray(new HttpPipelinePolicy[0])) | ||
| .build(); | ||
| return new ArmLegacyManager(httpPipeline, profile, defaultPollInterval); | ||
| } | ||
| } | ||
|
|
||
| /** | ||
| * Gets the resource collection API of Skus. It manages SkuResource. | ||
| * | ||
| * @return Resource collection API of Skus. | ||
| */ | ||
| public Skus skus() { | ||
| if (this.skus == null) { | ||
| this.skus = new SkusImpl(clientObject.getSkus(), this); | ||
| } | ||
| return skus; | ||
| } | ||
|
|
||
| /** | ||
| * Gets wrapped service client ArmLegacyClient providing direct access to the underlying auto-generated API | ||
| * implementation, based on Azure REST API. | ||
| * | ||
| * @return Wrapped service client ArmLegacyClient. | ||
| */ | ||
| public ArmLegacyClient serviceClient() { | ||
| return this.clientObject; | ||
| } | ||
| } |
55 changes: 55 additions & 0 deletions
55
...or/http-client-generator-test/src/main/java/tsptest/armlegacy/fluent/ArmLegacyClient.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| // Copyright (c) Microsoft Corporation. All rights reserved. | ||
| // Licensed under the MIT License. | ||
| // Code generated by Microsoft (R) TypeSpec Code Generator. | ||
|
|
||
| package tsptest.armlegacy.fluent; | ||
|
|
||
| import com.azure.core.http.HttpPipeline; | ||
| import java.time.Duration; | ||
|
|
||
| /** | ||
| * The interface for ArmLegacyClient class. | ||
| */ | ||
| public interface ArmLegacyClient { | ||
| /** | ||
| * Gets Service host. | ||
| * | ||
| * @return the endpoint value. | ||
| */ | ||
| String getEndpoint(); | ||
|
|
||
| /** | ||
| * Gets Version parameter. | ||
| * | ||
| * @return the apiVersion value. | ||
| */ | ||
| String getApiVersion(); | ||
|
|
||
| /** | ||
| * Gets The ID of the target subscription. The value must be an UUID. | ||
| * | ||
| * @return the subscriptionId value. | ||
| */ | ||
| String getSubscriptionId(); | ||
|
|
||
| /** | ||
| * Gets The HTTP pipeline to send requests through. | ||
| * | ||
| * @return the httpPipeline value. | ||
| */ | ||
| HttpPipeline getHttpPipeline(); | ||
|
|
||
| /** | ||
| * Gets The default poll interval for long-running operation. | ||
| * | ||
| * @return the defaultPollInterval value. | ||
| */ | ||
| Duration getDefaultPollInterval(); | ||
|
|
||
| /** | ||
| * Gets the SkusClient object to access its operations. | ||
| * | ||
| * @return the SkusClient object. | ||
| */ | ||
| SkusClient getSkus(); | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.