package inject; import com.google.inject.Provider; import io.sphere.sdk.client.*; import io.sphere.sdk.http.HttpClient; import io.sphere.sdk.play.metrics.MetricHttpClient; import play.Configuration; import play.Logger; import javax.inject.Inject; import javax.inject.Singleton; import static java.util.Objects.requireNonNull; @Singleton class SphereClientProvider implements Provider<SphereClient> { private final Configuration configuration; @Inject public SphereClientProvider(final Configuration configuration) { this.configuration = configuration; } @Override public SphereClient get() { Logger.debug("Provide SphereClient"); final SphereClientConfig config = getSphereClientConfig(); return createSphereClient(config); } private SphereClient createSphereClient(final SphereClientConfig config) { final HttpClient underlyingHttpClient = SphereAsyncHttpClientFactory.create(); final MetricHttpClient httpClient = MetricHttpClient.of(underlyingHttpClient); final SphereAccessTokenSupplier tokenSupplier = SphereAccessTokenSupplierFactory.of(() -> httpClient).createSupplierOfAutoRefresh(config); return SphereClient.of(config, httpClient, tokenSupplier); } private SphereClientConfig getSphereClientConfig() { final String project = requireNonNull(configuration.getString("sphere.project")); final String clientId = requireNonNull(configuration.getString("sphere.clientId")); final String clientSecret = requireNonNull(configuration.getString("sphere.clientSecret")); return SphereClientConfig.of(project, clientId, clientSecret); } }