package com.azimo.tool.jira.module; import com.azimo.tool.config.AppConfig; import com.azimo.tool.config.AppConfigKey; import com.azimo.tool.jira.JiraIssueService; import com.azimo.tool.jira.JiraIssueServiceManager; import com.azimo.tool.jira.interceptor.JiraContentTypeInterceptor; import com.azimo.tool.jira.interceptor.JiraCredentialInterceptor; import com.azimo.tool.jira.interceptor.JiraXSRFInterceptor; import com.google.gson.Gson; import dagger.Module; import dagger.Provides; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.converter.scalars.ScalarsConverterFactory; import javax.inject.Named; import javax.inject.Singleton; import java.util.concurrent.TimeUnit; /** * Created by F1sherKK on 16/01/17. */ @Module public class JiraModule { @Singleton @Provides @Named("JiraApi") public OkHttpClient provideJiraOkHttpClient(AppConfig appConfig) { OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); clientBuilder.addInterceptor(new JiraCredentialInterceptor(appConfig)); clientBuilder.addInterceptor(new JiraContentTypeInterceptor()); clientBuilder.addInterceptor(new JiraXSRFInterceptor()); clientBuilder.connectTimeout(60 * 1000, TimeUnit.MILLISECONDS); clientBuilder.readTimeout(60 * 1000, TimeUnit.MILLISECONDS); clientBuilder.writeTimeout(60 * 1000, TimeUnit.MILLISECONDS); return clientBuilder.build(); } @Singleton @Provides @Named("JiraApi") public Retrofit provideJiraRetrofit(AppConfig appConfig, @Named("JiraApi") OkHttpClient okHttpClient) { Retrofit.Builder builder = new Retrofit.Builder(); builder.baseUrl(appConfig.get(AppConfigKey.JIRA_BASEPATH)) .client(okHttpClient) .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create(new Gson())) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()); return builder.build(); } @Singleton @Provides public JiraIssueService provideJiraIssueService(@Named("JiraApi") Retrofit jiraRetrofit) { return jiraRetrofit.create(JiraIssueService.class); } @Singleton @Provides public JiraIssueServiceManager provideJiraIssueServiceManager(JiraIssueService issueService) { return new JiraIssueServiceManager(issueService); } }