package com.alorma.github.injector.module.repository; import com.alorma.github.injector.named.IOScheduler; import com.alorma.github.injector.named.MainScheduler; import com.alorma.github.injector.named.Token; import com.alorma.github.injector.scope.PerActivity; import com.alorma.github.presenter.RepositoryReadmePresenter; import com.alorma.github.presenter.repos.ReadmeCacheDataSource; import com.alorma.github.sdk.bean.ReadmeInfo; import com.alorma.github.sdk.bean.info.RepoInfo; import core.ApiClient; import core.repositories.markdown.MarkdownCloudDataSource; import core.repositories.markdown.MarkdownRetrofitWrapper; import core.repositories.readme.ReadmeCloudDataSource; import core.repositories.readme.ReadmeRetrofitWrapper; import core.repositories.readme.RepoReadmeRepository; import core.repository.GenericRepository; import dagger.Module; import dagger.Provides; import rx.Scheduler; @Module public class RepositoryReadmeModule { @Provides @PerActivity ReadmeCacheDataSource provideCacheDatasource() { return new ReadmeCacheDataSource(); } @Provides @PerActivity ReadmeRetrofitWrapper provideReadmeRetrofitWrapper(ApiClient apiClient, @Token String token) { return new ReadmeRetrofitWrapper(apiClient, token); } @Provides @PerActivity ReadmeCloudDataSource provideReadmeCloudDataSource(ReadmeRetrofitWrapper tagsRetrofitWrapper) { return new ReadmeCloudDataSource(tagsRetrofitWrapper); } @Provides @PerActivity MarkdownRetrofitWrapper provideMarkdownRetrofitWrapper(ApiClient apiClient, @Token String token) { return new MarkdownRetrofitWrapper(apiClient, token); } @Provides @PerActivity MarkdownCloudDataSource providesMarkdownDatasource(MarkdownRetrofitWrapper restWrapper) { return new MarkdownCloudDataSource(restWrapper); } @Provides @PerActivity GenericRepository<ReadmeInfo, String> providesRepository(ReadmeCacheDataSource readmeCacheDataSource, ReadmeCloudDataSource readmeCloudDataSource, MarkdownCloudDataSource markdownCloudDataSource) { return new RepoReadmeRepository(readmeCacheDataSource, readmeCloudDataSource, markdownCloudDataSource); } @Provides @PerActivity RepositoryReadmePresenter provideRepositoryTagsPresenter(@MainScheduler Scheduler mainScheduler, @IOScheduler Scheduler ioScheduler, GenericRepository<ReadmeInfo, String> repository) { return new RepositoryReadmePresenter(mainScheduler, ioScheduler, repository); } }