All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nl.topicus.jdbc.shaded.com.google.api.gax.rpc.ClientSettings Maven / Gradle / Ivy

/*
 * Copyright 2016, Google LLC All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google LLC nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package nl.topicus.jdbc.shaded.com.google.api.gax.rpc;

import nl.topicus.jdbc.shaded.com.google.api.core.ApiClock;
import nl.topicus.jdbc.shaded.com.google.api.core.ApiFunction;
import nl.topicus.jdbc.shaded.com.google.api.core.BetaApi;
import nl.topicus.jdbc.shaded.com.google.api.core.NanoClock;
import nl.topicus.jdbc.shaded.com.google.api.gax.core.CredentialsProvider;
import nl.topicus.jdbc.shaded.com.google.api.gax.core.ExecutorProvider;
import nl.topicus.jdbc.shaded.com.google.api.gax.core.FixedCredentialsProvider;
import nl.topicus.jdbc.shaded.com.google.api.gax.core.FixedExecutorProvider;
import nl.topicus.jdbc.shaded.com.google.api.gax.core.InstantiatingExecutorProvider;
import nl.topicus.jdbc.shaded.com.google.api.gax.core.NoCredentialsProvider;
import nl.topicus.jdbc.shaded.com.google.common.base.MoreObjects;
import nl.topicus.jdbc.shaded.com.google.common.base.Preconditions;
import java.io.IOException;

/**
 * A base settings class to configure a service API class.
 *
 * 

This base class includes settings that are applicable to all services, which includes things * like settings for creating an executor, credentials, transport-specific settings, and identifiers * for http headers. * *

If no ExecutorProvider is set, then InstantiatingExecutorProvider will be used, which creates * a default executor. */ public abstract class ClientSettings> { private final ExecutorProvider executorProvider; private final CredentialsProvider credentialsProvider; private final HeaderProvider headerProvider; private final HeaderProvider internalHeaderProvider; private final TransportChannelProvider transportChannelProvider; private final ApiClock clock; private final String endpoint; /** Constructs an instance of ClientSettings. */ protected ClientSettings(Builder builder) { this.executorProvider = builder.executorProvider; this.transportChannelProvider = builder.transportChannelProvider; this.credentialsProvider = builder.credentialsProvider; this.headerProvider = builder.headerProvider; this.internalHeaderProvider = builder.internalHeaderProvider; this.clock = builder.clock; this.endpoint = builder.endpoint; } public final ExecutorProvider getExecutorProvider() { return executorProvider; } public final TransportChannelProvider getTransportChannelProvider() { return transportChannelProvider; } public final CredentialsProvider getCredentialsProvider() { return credentialsProvider; } @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") public final HeaderProvider getHeaderProvider() { return headerProvider; } @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") protected final HeaderProvider getInternalHeaderProvider() { return internalHeaderProvider; } public final ApiClock getClock() { return clock; } public final String getEndpoint() { return endpoint; } public String toString() { return MoreObjects.toStringHelper(this) .add("executorProvider", executorProvider) .add("transportChannelProvider", transportChannelProvider) .add("credentialsProvider", credentialsProvider) .add("headerProvider", headerProvider) .add("internalHeaderProvider", internalHeaderProvider) .add("clock", clock) .add("endpoint", endpoint) .toString(); } public abstract > B toBuilder(); public abstract static class Builder< SettingsT extends ClientSettings, B extends Builder> { private ExecutorProvider executorProvider; private CredentialsProvider credentialsProvider; private HeaderProvider headerProvider; private HeaderProvider internalHeaderProvider; private TransportChannelProvider transportChannelProvider; private ApiClock clock; private String endpoint; /** Create a builder from a ClientSettings object. */ protected Builder(ClientSettings settings) { this.executorProvider = settings.executorProvider; this.transportChannelProvider = settings.transportChannelProvider; this.credentialsProvider = settings.credentialsProvider; this.headerProvider = settings.headerProvider; this.internalHeaderProvider = settings.internalHeaderProvider; this.clock = settings.clock; this.endpoint = settings.endpoint; } protected Builder(ClientContext clientContext) { if (clientContext == null) { this.executorProvider = InstantiatingExecutorProvider.newBuilder().build(); this.transportChannelProvider = null; this.credentialsProvider = NoCredentialsProvider.create(); this.headerProvider = new NoHeaderProvider(); this.internalHeaderProvider = new NoHeaderProvider(); this.clock = NanoClock.getDefaultClock(); this.endpoint = null; } else { this.executorProvider = FixedExecutorProvider.create(clientContext.getExecutor()); this.transportChannelProvider = FixedTransportChannelProvider.create(clientContext.getTransportChannel()); this.credentialsProvider = FixedCredentialsProvider.create(clientContext.getCredentials()); this.headerProvider = FixedHeaderProvider.create(clientContext.getHeaders()); this.internalHeaderProvider = FixedHeaderProvider.create(clientContext.getInternalHeaders()); this.clock = clientContext.getClock(); this.endpoint = clientContext.getEndpoint(); } } protected Builder() { this((ClientContext) null); } @SuppressWarnings("unchecked") protected B self() { return (B) this; } /** * Sets the ExecutorProvider to use for getting the executor to use for running asynchronous API * call logic (such as retries and long-running operations), and also to pass to the transport * settings if an executor is needed for the transport and it doesn't have its own executor * provider. */ public B setExecutorProvider(ExecutorProvider executorProvider) { this.executorProvider = executorProvider; return self(); } /** Sets the CredentialsProvider to use for getting the credentials to make calls with. */ public B setCredentialsProvider(CredentialsProvider credentialsProvider) { this.credentialsProvider = Preconditions.checkNotNull(credentialsProvider); return self(); } /** * Sets the HeaderProvider for getting custom static headers for http requests. The header * provider will be called during client construction only once. The headers returned by the * provider will be cached and supplied as is for each request issued by the constructed client. * Some reserved headers can be overridden (e.g. Content-Type) or merged with the default value * (e.g. User-Agent) by the underlying transport layer. */ @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") public B setHeaderProvider(HeaderProvider headerProvider) { this.headerProvider = headerProvider; return self(); } /** * Sets the HeaderProvider for getting internal (library-defined) static headers for http * requests. The header provider will be called during client construction only once. The * headers returned by the provider will be cached and supplied as is for each request issued by * the constructed client. Some reserved headers can be overridden (e.g. Content-Type) or merged * with the default value (e.g. User-Agent) by the underlying transport layer. */ @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") protected B setInternalHeaderProvider(HeaderProvider internalHeaderProvider) { this.internalHeaderProvider = internalHeaderProvider; return self(); } /** * Sets the TransportProvider to use for getting the transport-specific context to make calls * with. */ public B setTransportChannelProvider(TransportChannelProvider transportChannelProvider) { this.transportChannelProvider = transportChannelProvider; return self(); } /** * Sets the clock to use for retry logic. * *

This will default to a system clock if it is not set. */ public B setClock(ApiClock clock) { this.clock = clock; return self(); } public B setEndpoint(String endpoint) { this.endpoint = endpoint; return self(); } /** Gets the ExecutorProvider that was previously set on this Builder. */ public ExecutorProvider getExecutorProvider() { return executorProvider; } /** Gets the TransportProvider that was previously set on this Builder. */ public TransportChannelProvider getTransportChannelProvider() { return transportChannelProvider; } /** Gets the CredentialsProvider that was previously set on this Builder. */ public CredentialsProvider getCredentialsProvider() { return credentialsProvider; } /** Gets the custom HeaderProvider that was previously set on this Builder. */ @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") public HeaderProvider getHeaderProvider() { return headerProvider; } /** Gets the internal HeaderProvider that was previously set on this Builder. */ @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") protected HeaderProvider getInternalHeaderProvider() { return internalHeaderProvider; } /** Gets the ApiClock that was previously set on this Builder. */ public ApiClock getClock() { return clock; } public String getEndpoint() { return endpoint; } /** Applies the given settings updater function to the given method settings builders. */ protected static void applyToAllUnaryMethods( Iterable> methodSettingsBuilders, ApiFunction, Void> settingsUpdater) throws Exception { for (UnaryCallSettings.Builder settingsBuilder : methodSettingsBuilders) { settingsUpdater.apply(settingsBuilder); } } public abstract SettingsT build() throws IOException; public String toString() { return MoreObjects.toStringHelper(this) .add("executorProvider", executorProvider) .add("transportChannelProvider", transportChannelProvider) .add("credentialsProvider", credentialsProvider) .add("headerProvider", headerProvider) .add("internalHeaderProvider", internalHeaderProvider) .add("clock", clock) .add("endpoint", endpoint) .toString(); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy