Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

package com.microsoft.typespec.http.client.generator.core.mapper;

import com.microsoft.typespec.http.client.generator.core.extension.model.codemodel.Client;
import com.microsoft.typespec.http.client.generator.core.extension.model.codemodel.Operation;
import com.microsoft.typespec.http.client.generator.core.extension.model.codemodel.OperationGroup;
import com.microsoft.typespec.http.client.generator.core.extension.plugin.JavaSettings;
Expand Down Expand Up @@ -115,7 +116,7 @@ private MethodGroupClient createMethodGroupClient(OperationGroup methodGroup,
builder.proxy(proxyBuilder.build());
}

String serviceClientName = ClientModelUtil.getClientImplementClassName(methodGroup.getCodeModel());
String serviceClientName = this.getServiceClientName(methodGroup.getCodeModel());
builder.serviceClientName(serviceClientName);

builder.variableName(CodeNamer.toCamelCase(interfaceName));
Expand Down Expand Up @@ -174,4 +175,9 @@ private MethodGroupClient createMethodGroupClient(OperationGroup methodGroup,
protected List<IType> supportedInterfaces(OperationGroup operationGroup, List<ClientMethod> clientMethods) {
return Collections.emptyList();
}

protected String getServiceClientName(Client client) {
String serviceClientInterfaceName = ClientModelUtil.getClientInterfaceName(client);
return ClientModelUtil.getClientImplementClassName(serviceClientInterfaceName);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.microsoft.typespec.http.client.generator.core.mapper;

import com.microsoft.typespec.http.client.generator.core.extension.model.codemodel.Client;
import com.microsoft.typespec.http.client.generator.core.util.ClientModelUtil;
import com.microsoft.typespec.http.client.generator.core.util.SchemaUtil;

/**
* Mapper entry point for TypeSpec-specific method group customizations.
*/
public class TypeSpecMethodGroupMapper extends MethodGroupMapper {
private static final TypeSpecMethodGroupMapper INSTANCE = new TypeSpecMethodGroupMapper();

protected TypeSpecMethodGroupMapper() {
super();
}

public static TypeSpecMethodGroupMapper getInstance() {
return INSTANCE;
}

@Override
protected String getServiceClientName(Client client) {
// TypeSpec will not automatically append "Client" to the service client name.
String baseName = SchemaUtil.getJavaName(client);
return ClientModelUtil.getClientImplementClassName(baseName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -216,15 +216,6 @@ public static String getClientInterfaceName(Client codeModel) {
return serviceClientInterfaceName;
}

/**
* @param codeModel the code model
* @return the class name of service client implementation.
*/
public static String getClientImplementClassName(Client codeModel) {
String serviceClientInterfaceName = getClientInterfaceName(codeModel);
return getClientImplementClassName(serviceClientInterfaceName);
}

/**
* @param serviceClientInterfaceName the interface name of service client
* @return the class name of service client implementation.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,14 @@ try {
Copy-Item -Path node_modules/@typespec/http-specs/specs -Destination ./ -Recurse -Force
Copy-Item -Path node_modules/@azure-tools/azure-http-specs/specs -Destination ./ -Recurse -Force

$job = (Get-ChildItem ./specs -Include "main.tsp","old.tsp" -File -Recurse) | ForEach-Object -Parallel $generateScript -ThrottleLimit $Parallelization -AsJob
$specFiles = Get-ChildItem ./specs -Include "main.tsp","old.tsp" -File -Recurse
$multiServiceSpec = Join-Path ./specs "azure/resource-manager/multi-service/client.tsp"
if (Test-Path $multiServiceSpec) {
# ensure multi-service client specs are processed even though they do not match the default filter
$specFiles += Get-Item $multiServiceSpec
}

$job = $specFiles | ForEach-Object -Parallel $generateScript -ThrottleLimit $Parallelization -AsJob

$job | Wait-Job -Timeout 1200
$job | Receive-Job
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"@typespec/spector": "0.1.0-alpha.21",
"@typespec/spec-api": "0.1.0-alpha.11",
"@typespec/http-specs": "0.1.0-alpha.29",
"@azure-tools/azure-http-specs": "0.1.0-alpha.33",
"@azure-tools/azure-http-specs": "0.1.0-alpha.34",
"@typespec/http-client-java": "file:../../typespec-http-client-java-0.6.1.tgz",
"@typespec/http-client-java-tests": "file:"
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,298 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) TypeSpec Code Generator.

package azure.resourcemanager.multiservice.combined;

import azure.resourcemanager.multiservice.combined.fluent.Combined;
import azure.resourcemanager.multiservice.combined.implementation.CombinedBuilder;
import azure.resourcemanager.multiservice.combined.implementation.DisksImpl;
import azure.resourcemanager.multiservice.combined.implementation.VirtualMachinesImpl;
import azure.resourcemanager.multiservice.combined.models.Disks;
import azure.resourcemanager.multiservice.combined.models.VirtualMachines;
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;

/**
* Entry point to CombinedManager.
* Compute Client.
*/
public final class CombinedManager {
private VirtualMachines virtualMachines;

private Disks disks;

private final Combined clientObject;

private CombinedManager(HttpPipeline httpPipeline, AzureProfile profile, Duration defaultPollInterval) {
Objects.requireNonNull(httpPipeline, "'httpPipeline' cannot be null.");
Objects.requireNonNull(profile, "'profile' cannot be null.");
this.clientObject = new CombinedBuilder().pipeline(httpPipeline)
.endpoint(profile.getEnvironment().getResourceManagerEndpoint())
.subscriptionId(profile.getSubscriptionId())
.defaultPollInterval(defaultPollInterval)
.buildClient();
}

/**
* Creates an instance of combined service API entry point.
*
* @param credential the credential to use.
* @param profile the Azure profile for client.
* @return the combined service API instance.
*/
public static CombinedManager 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 combined service API entry point.
*
* @param httpPipeline the {@link HttpPipeline} configured with Azure authentication credential.
* @param profile the Azure profile for client.
* @return the combined service API instance.
*/
public static CombinedManager authenticate(HttpPipeline httpPipeline, AzureProfile profile) {
Objects.requireNonNull(httpPipeline, "'httpPipeline' cannot be null.");
Objects.requireNonNull(profile, "'profile' cannot be null.");
return new CombinedManager(httpPipeline, profile, null);
}

/**
* Gets a Configurable instance that can be used to create CombinedManager with optional configuration.
*
* @return the Configurable instance allowing configurations.
*/
public static Configurable configure() {
return new CombinedManager.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-combined-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 combined service API entry point.
*
* @param credential the credential to use.
* @param profile the Azure profile for client.
* @return the combined service API instance.
*/
public CombinedManager 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("azure.resourcemanager.multiservice.combined")
.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 CombinedManager(httpPipeline, profile, defaultPollInterval);
}
}

/**
* Gets the resource collection API of VirtualMachines. It manages VirtualMachine.
*
* @return Resource collection API of VirtualMachines.
*/
public VirtualMachines virtualMachines() {
if (this.virtualMachines == null) {
this.virtualMachines = new VirtualMachinesImpl(clientObject.getVirtualMachines(), this);
}
return virtualMachines;
}

/**
* Gets the resource collection API of Disks. It manages Disk.
*
* @return Resource collection API of Disks.
*/
public Disks disks() {
if (this.disks == null) {
this.disks = new DisksImpl(clientObject.getDisks(), this);
}
return disks;
}

/**
* Gets wrapped service client Combined providing direct access to the underlying auto-generated API implementation,
* based on Azure REST API.
*
* @return Wrapped service client Combined.
*/
public Combined serviceClient() {
return this.clientObject;
}
}
Loading
Loading