
io.relayr.java.api.ApiModule Maven / Gradle / Ivy
package io.relayr.java.api;
import com.squareup.okhttp.Cache;
import com.squareup.okhttp.OkHttpClient;
import java.io.File;
import javax.inject.Named;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import io.relayr.java.RelayrJavaApp;
import retrofit.Endpoint;
import retrofit.Endpoints;
import retrofit.ErrorHandler;
import retrofit.RequestInterceptor;
import retrofit.RestAdapter;
import retrofit.RetrofitError;
import retrofit.client.Client;
import retrofit.client.OkClient;
import retrofit.client.Response;
@Module(
complete = false,
library = true
)
public class ApiModule {
private static final String API_ENDPOINT_DEV = "https://dev-api.relayr.io";
private static final String API_ENDPOINT = "https://api.relayr.io";
private static final int DISK_CACHE_SIZE = 50 * 1024 * 1024; // 50MB
private static final String USER_AGENT = "JavaSdk";
public static String getApiPoint() {
return RelayrJavaApp.PRODUCTION ? API_ENDPOINT : API_ENDPOINT_DEV;
}
private static final RequestInterceptor apiRequestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("User-Agent", USER_AGENT);
request.addHeader("Authorization", RelayrJavaApp.getToken());
request.addHeader("Content-Type", "application/json; charset=UTF-8");
}
};
private static final RequestInterceptor modelsRequestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("User-Agent", ApiModule.USER_AGENT);
request.addHeader("Authorization", RelayrJavaApp.getToken());
request.addHeader("Content-Type", "application/hal+json");
}
};
private static final RequestInterceptor oauthRequestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("User-Agent", USER_AGENT);
}
};
@Provides @Singleton Endpoint provideEndpoint() {
return Endpoints.newFixedEndpoint(getApiPoint());
}
@Provides @Singleton OkHttpClient provideOkHttpClient() {
return createOkHttpClient();
}
@Provides @Singleton Client provideClient(OkHttpClient client) {
return new OkClient(client);
}
@Provides @Singleton @Named("api") RestAdapter provideApiRestAdapter(
Endpoint endpoint, Client client) {
return createRestAdapter(client, endpoint, apiRequestInterceptor, RelayrJavaApp.getLogLevel());
}
@Provides @Singleton @Named("oauth") RestAdapter provideOauthRestAdapter(
Endpoint endpoint, Client client) {
return createRestAdapter(client, endpoint, oauthRequestInterceptor, RelayrJavaApp.getLogLevel());
}
@Provides @Singleton @Named("models") RestAdapter provideModelsRestAdapter(
Endpoint endpoint, Client client) {
return createRestAdapter(client, endpoint, modelsRequestInterceptor, RelayrJavaApp.getLogLevel());
}
@Provides @Singleton OauthApi provideOauthApi(@Named("oauth") RestAdapter adapter) {
return adapter.create(OauthApi.class);
}
@Provides @Singleton ChannelApi provideChannelApi(@Named("api")
RestAdapter adapter) {
return adapter.create(ChannelApi.class);
}
@Provides @Singleton CloudApi provideCloudApi(@Named("api") RestAdapter adapter) {
return adapter.create(CloudApi.class);
}
@Provides @Singleton RelayrApi provideRelayrApi(@Named("api") RestAdapter adapter) {
return adapter.create(RelayrApi.class);
}
@Provides @Singleton DeviceApi provideDeviceApi(@Named("api") RestAdapter adapter) {
return adapter.create(DeviceApi.class);
}
@Provides @Singleton AccountsApi provideAccountsApi(@Named("api") RestAdapter adapter) {
return adapter.create(AccountsApi.class);
}
@Provides @Singleton GroupsApi provideGroupsApi(@Named("api") RestAdapter adapter) {
return adapter.create(GroupsApi.class);
}
@Provides @Singleton UserApi provideUserApi(@Named("api") RestAdapter adapter) {
return adapter.create(UserApi.class);
}
@Provides @Singleton
DeviceModelsApi provideDeviceModelsApi(@Named("models") RestAdapter adapter) {
return adapter.create(DeviceModelsApi.class);
}
private RestAdapter createRestAdapter(Client client, Endpoint endpoint,
RequestInterceptor interceptor,
RestAdapter.LogLevel logLevel) {
return new RestAdapter.Builder()
.setClient(client)
.setEndpoint(endpoint)
.setRequestInterceptor(interceptor)
.setErrorHandler(new ApiErrorHandler())
.setLogLevel(logLevel)
.build();
}
private static OkHttpClient createOkHttpClient() {
OkHttpClient client = new OkHttpClient();
File cacheDir = new File("/", "https");
Cache cache = new Cache(cacheDir, DISK_CACHE_SIZE);
client.setCache(cache);
return client;
}
class ApiErrorHandler implements ErrorHandler {
@Override public Throwable handleError(RetrofitError cause) {
Response response = cause.getResponse();
if (response != null && response.getStatus() > 301) return new Exception(cause);
return cause;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy