Skip to content
Draft
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 @@ -12,11 +12,11 @@
"spector-stop": "tsp-spector server stop"
},
"dependencies": {
"@typespec/spector": "0.1.0-alpha.20",
"@typespec/spec-api": "0.1.0-alpha.10",
"@typespec/http-specs": "0.1.0-alpha.28",
"@typespec/spector": "0.1.0-alpha.21",
"@typespec/spec-api": "0.1.0-alpha.11",
"@typespec/http-specs": "0.1.0-alpha.29",
"@typespec/json-schema": "1.6.0",
"@typespec/http-client-java": "file:../../typespec-http-client-java-0.6.0.tgz",
"@typespec/http-client-java": "file:../../typespec-http-client-java-0.6.1.tgz",
"@typespec/http-client-java-tests": "file:"
},
"overrides": {
Expand All @@ -29,6 +29,7 @@
"@typespec/events": "0.76.0",
"@typespec/sse": "0.76.0",
"@typespec/streams": "0.76.0",
"@typespec/json-schema": "1.6.0",
"@azure-tools/typespec-azure-core": "0.62.0",
"@azure-tools/typespec-client-generator-core": "0.62.0",
"@azure-tools/typespec-azure-resource-manager": "0.62.1",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
package documentation;

import documentation.implementation.DocumentationClientImpl;
import io.clientcore.core.annotations.Metadata;
import io.clientcore.core.annotations.MetadataProperties;
import io.clientcore.core.annotations.ServiceClientBuilder;
import io.clientcore.core.http.client.HttpClient;
import io.clientcore.core.http.models.ProxyOptions;
import io.clientcore.core.http.pipeline.HttpInstrumentationOptions;
import io.clientcore.core.http.pipeline.HttpInstrumentationPolicy;
import io.clientcore.core.http.pipeline.HttpPipeline;
import io.clientcore.core.http.pipeline.HttpPipelineBuilder;
import io.clientcore.core.http.pipeline.HttpPipelinePolicy;
import io.clientcore.core.http.pipeline.HttpRedirectOptions;
import io.clientcore.core.http.pipeline.HttpRedirectPolicy;
import io.clientcore.core.http.pipeline.HttpRetryOptions;
import io.clientcore.core.http.pipeline.HttpRetryPolicy;
import io.clientcore.core.instrumentation.Instrumentation;
import io.clientcore.core.instrumentation.SdkInstrumentationOptions;
import io.clientcore.core.traits.ConfigurationTrait;
import io.clientcore.core.traits.EndpointTrait;
import io.clientcore.core.traits.HttpTrait;
import io.clientcore.core.traits.ProxyTrait;
import io.clientcore.core.utils.CoreUtils;
import io.clientcore.core.utils.configuration.Configuration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
* A builder for creating a new instance of the DocumentationClient type.
*/
@ServiceClientBuilder(serviceClients = { ListsClient.class, TextFormattingClient.class })
public final class DocumentationClientBuilder
implements HttpTrait<DocumentationClientBuilder>, ProxyTrait<DocumentationClientBuilder>,
ConfigurationTrait<DocumentationClientBuilder>, EndpointTrait<DocumentationClientBuilder> {
@Metadata(properties = { MetadataProperties.GENERATED })
private static final String SDK_NAME = "name";

@Metadata(properties = { MetadataProperties.GENERATED })
private static final String SDK_VERSION = "version";

@Metadata(properties = { MetadataProperties.GENERATED })
private static final Map<String, String> PROPERTIES = CoreUtils.getProperties("documentation.properties");

@Metadata(properties = { MetadataProperties.GENERATED })
private final List<HttpPipelinePolicy> pipelinePolicies;

/**
* Create an instance of the DocumentationClientBuilder.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
public DocumentationClientBuilder() {
this.pipelinePolicies = new ArrayList<>();
}

/*
* The HTTP client used to send the request.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
private HttpClient httpClient;

/**
* {@inheritDoc}.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
@Override
public DocumentationClientBuilder httpClient(HttpClient httpClient) {
this.httpClient = httpClient;
return this;
}

/*
* The retry options to configure retry policy for failed requests.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
private HttpRetryOptions retryOptions;

/**
* {@inheritDoc}.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
@Override
public DocumentationClientBuilder httpRetryOptions(HttpRetryOptions retryOptions) {
this.retryOptions = retryOptions;
return this;
}

/**
* {@inheritDoc}.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
@Override
public DocumentationClientBuilder addHttpPipelinePolicy(HttpPipelinePolicy customPolicy) {
Objects.requireNonNull(customPolicy, "'customPolicy' cannot be null.");
pipelinePolicies.add(customPolicy);
return this;
}

/*
* The redirect options to configure redirect policy
*/
@Metadata(properties = { MetadataProperties.GENERATED })
private HttpRedirectOptions redirectOptions;

/**
* {@inheritDoc}.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
@Override
public DocumentationClientBuilder httpRedirectOptions(HttpRedirectOptions redirectOptions) {
this.redirectOptions = redirectOptions;
return this;
}

/*
* The instrumentation configuration for HTTP requests and responses.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
private HttpInstrumentationOptions httpInstrumentationOptions;

/**
* {@inheritDoc}.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
@Override
public DocumentationClientBuilder
httpInstrumentationOptions(HttpInstrumentationOptions httpInstrumentationOptions) {
this.httpInstrumentationOptions = httpInstrumentationOptions;
return this;
}

/*
* The proxy options used during construction of the service client.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
private ProxyOptions proxyOptions;

/**
* {@inheritDoc}.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
@Override
public DocumentationClientBuilder proxyOptions(ProxyOptions proxyOptions) {
this.proxyOptions = proxyOptions;
return this;
}

/*
* The configuration store that is used during construction of the service client.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
private Configuration configuration;

/**
* {@inheritDoc}.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
@Override
public DocumentationClientBuilder configuration(Configuration configuration) {
this.configuration = configuration;
return this;
}

/*
* The service endpoint
*/
@Metadata(properties = { MetadataProperties.GENERATED })
private String endpoint;

/**
* {@inheritDoc}.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
@Override
public DocumentationClientBuilder endpoint(String endpoint) {
this.endpoint = endpoint;
return this;
}

/**
* Builds an instance of DocumentationClientImpl with the provided parameters.
*
* @return an instance of DocumentationClientImpl.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
private DocumentationClientImpl buildInnerClient() {
this.validateClient();
String localEndpoint = (endpoint != null) ? endpoint : "http://localhost:3000";
HttpInstrumentationOptions localHttpInstrumentationOptions = this.httpInstrumentationOptions == null
? new HttpInstrumentationOptions()
: this.httpInstrumentationOptions;
SdkInstrumentationOptions sdkInstrumentationOptions
= new SdkInstrumentationOptions(PROPERTIES.getOrDefault(SDK_NAME, "UnknownName"))
.setSdkVersion(PROPERTIES.get(SDK_VERSION))
.setEndpoint(localEndpoint);
Instrumentation instrumentation
= Instrumentation.create(localHttpInstrumentationOptions, sdkInstrumentationOptions);
DocumentationClientImpl client
= new DocumentationClientImpl(createHttpPipeline(), instrumentation, localEndpoint);
return client;
}

@Metadata(properties = { MetadataProperties.GENERATED })
private void validateClient() {
// This method is invoked from 'buildInnerClient'/'buildClient' method.
// Developer can customize this method, to validate that the necessary conditions are met for the new client.
}

@Metadata(properties = { MetadataProperties.GENERATED })
private HttpPipeline createHttpPipeline() {
Configuration buildConfiguration
= (configuration == null) ? Configuration.getGlobalConfiguration() : configuration;
HttpInstrumentationOptions localHttpInstrumentationOptions = this.httpInstrumentationOptions == null
? new HttpInstrumentationOptions()
: this.httpInstrumentationOptions;
HttpPipelineBuilder httpPipelineBuilder = new HttpPipelineBuilder();
List<HttpPipelinePolicy> policies = new ArrayList<>();
policies.add(redirectOptions == null ? new HttpRedirectPolicy() : new HttpRedirectPolicy(redirectOptions));
policies.add(retryOptions == null ? new HttpRetryPolicy() : new HttpRetryPolicy(retryOptions));
this.pipelinePolicies.stream().forEach(p -> policies.add(p));
policies.add(new HttpInstrumentationPolicy(localHttpInstrumentationOptions));
policies.forEach(httpPipelineBuilder::addPolicy);
return httpPipelineBuilder.httpClient(httpClient).build();
}

/**
* Builds an instance of ListsClient class.
*
* @return an instance of ListsClient.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
public ListsClient buildListsClient() {
DocumentationClientImpl innerClient = buildInnerClient();
return new ListsClient(innerClient.getLists(), innerClient.getInstrumentation());
}

/**
* Builds an instance of TextFormattingClient class.
*
* @return an instance of TextFormattingClient.
*/
@Metadata(properties = { MetadataProperties.GENERATED })
public TextFormattingClient buildTextFormattingClient() {
DocumentationClientImpl innerClient = buildInnerClient();
return new TextFormattingClient(innerClient.getTextFormattings(), innerClient.getInstrumentation());
}
}
Loading
Loading