/*
* COMSAT
* Copyright (c) 2013-2016, Parallel Universe Software Co. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 3.0
* as published by the Free Software Foundation.
*/
package co.paralleluniverse.fibers.retrofit;
import co.paralleluniverse.fibers.httpclient.FiberHttpClient;
import co.paralleluniverse.fibers.httpclient.FiberHttpClientBuilder;
import co.paralleluniverse.fibers.okhttp.FiberOkHttpClient;
import com.squareup.okhttp.OkHttpClient;
import org.apache.http.client.HttpClient;
import retrofit.RestAdapter;
import retrofit.client.ApacheClient;
import retrofit.client.Client;
import retrofit.client.OkClient;
public final class FiberRestAdapterBuilder extends RestAdapter.Builder {
private HttpClient httpClient;
private OkHttpClient okHttpClient;
@Override
public final RestAdapter.Builder setClient(Client.Provider clientProvider) {
throw new UnsupportedOperationException("Only Fiber Apache Http or OkHttp clients are allowed here. Use setClient(FiberHttpClient) or setClient(FiberOkHttpClient) instead.");
}
@Override
public final RestAdapter.Builder setClient(Client client) {
throw new UnsupportedOperationException("Only Fiber Apache Http or OkHttp clients are allowed here. Use setClient(FiberHttpClient) or setClient(FiberOkHttpClient) instead.");
}
public final RestAdapter.Builder setClient(FiberHttpClient client) {
this.httpClient = client;
return this;
}
public final RestAdapter.Builder setClient(FiberOkHttpClient client) {
this.okHttpClient = client;
return this;
}
@Override
public RestAdapter build() {
if (okHttpClient != null) {
super.setClient(providerFor(new OkClient(okHttpClient)));
} else {
if (httpClient == null)
// setUserAgent("") is not default it ApacheHttpClient, and is needed for the github API
this.httpClient = FiberHttpClientBuilder.create().setUserAgent("").build();
super.setClient(providerFor(new ApacheClient(httpClient)));
}
return super.build();
}
private static Client.Provider providerFor(final Client client) {
return new Client.Provider() {
@Override
public Client get() {
return client;
}
};
}
}