Created
December 30, 2016 09:37
-
-
Save mondoktamas/1ec92975c61daeb3ebfe7a6d7b4d5dd9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.booklava.booklava.data.repository; | |
import com.booklava.booklava.data.cache.DataCacheFactory; | |
import com.booklava.booklava.data.network.BookApiService; | |
import com.booklava.booklava.data.network.BookmarkApiService; | |
import com.booklava.booklava.data.network.CartApiService; | |
import com.booklava.booklava.data.network.CategoryApiService; | |
import com.booklava.booklava.data.network.CountryApiService; | |
import com.booklava.booklava.data.network.CreditApiService; | |
import com.booklava.booklava.data.network.FAQApiService; | |
import com.booklava.booklava.data.network.FeedbackApiService; | |
import com.booklava.booklava.data.network.LibraryApiService; | |
import com.booklava.booklava.data.network.ListeningTimeApiService; | |
import com.booklava.booklava.data.network.SearchApiService; | |
import com.booklava.booklava.data.network.SocialApiService; | |
import com.booklava.booklava.data.network.SupportRequestApiService; | |
import com.booklava.booklava.data.network.SyncApiService; | |
import com.booklava.booklava.data.network.UserApiService; | |
import com.booklava.booklava.data.network.WishlistApiService; | |
import com.booklava.booklava.data.repository.impl.BookRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.BookmarkRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.CartRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.CategoriesRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.CountryRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.CreditRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.FAQRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.FeedbackRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.LibraryRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.ListeningTimeRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.SearchRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.SocialAuthRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.SupportRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.SyncRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.UserRepositoryImpl; | |
import com.booklava.booklava.data.repository.impl.WishlistRepositoryImpl; | |
import com.booklava.core.domain.repository.Repository; | |
import java.util.WeakHashMap; | |
/** | |
* Created by tomashmondok on 8/8/16. | |
*/ | |
public final class RepositoryFactory { | |
private final static int DEFAULT_STORE_REPO = 10; | |
private WeakHashMap<Class, Repository> mRepositoryHolder; | |
private static RepositoryFactory sInstance = new RepositoryFactory(); | |
private RepositoryFactory() { | |
mRepositoryHolder = new WeakHashMap<>(DEFAULT_STORE_REPO); | |
} | |
private static Repository getRepositoryByService(final Object apiService) { | |
if (sInstance.mRepositoryHolder == null) | |
sInstance.mRepositoryHolder = new WeakHashMap<>(DEFAULT_STORE_REPO); | |
if (sInstance.mRepositoryHolder.containsKey(apiService.getClass())) { | |
return sInstance.mRepositoryHolder.get(apiService.getClass()); | |
} else { | |
final Repository repository = createRepository(apiService); | |
sInstance.mRepositoryHolder.put(apiService.getClass(), repository); | |
return repository; | |
} | |
} | |
private static Repository createRepository(final Object apiService) { | |
if (apiService instanceof UserApiService) | |
return new UserRepositoryImpl((UserApiService) apiService, DataCacheFactory.getUserDataCache()); | |
else if (apiService instanceof CategoryApiService) | |
return new CategoriesRepositoryImpl((CategoryApiService) apiService, DataCacheFactory.getCategoryDataCache()); | |
else if (apiService instanceof CountryApiService) | |
return new CountryRepositoryImpl((CountryApiService) apiService); | |
else if (apiService instanceof BookApiService) | |
return new BookRepositoryImpl((BookApiService) apiService, | |
DataCacheFactory.getBookDataCache(), | |
DataCacheFactory.getBannerDataCache()); | |
else if (apiService instanceof LibraryApiService) | |
return new LibraryRepositoryImpl((LibraryApiService) apiService, | |
DataCacheFactory.getLibraryDataCache(), | |
DataCacheFactory.getFileStorageCache()); | |
else if (apiService instanceof WishlistApiService) | |
return new WishlistRepositoryImpl((WishlistApiService) apiService, DataCacheFactory.getSyncDataCache()); | |
else if (apiService instanceof CartApiService) | |
return new CartRepositoryImpl((CartApiService) apiService, DataCacheFactory.getUserDataCache()); | |
else if (apiService instanceof SocialApiService) | |
return new SocialAuthRepositoryImpl((SocialApiService) apiService); | |
else if (apiService instanceof FeedbackApiService) | |
return new FeedbackRepositoryImpl((FeedbackApiService) apiService); | |
else if (apiService instanceof ListeningTimeApiService) | |
return new ListeningTimeRepositoryImpl((ListeningTimeApiService) apiService, | |
DataCacheFactory.getListeningTimeCache()); | |
else if (apiService instanceof SearchApiService) | |
return new SearchRepositoryImpl((SearchApiService) apiService, | |
DataCacheFactory.getLibraryDataCache()); | |
else if (apiService instanceof CreditApiService) | |
return new CreditRepositoryImpl((CreditApiService) apiService, DataCacheFactory.getUserDataCache()); | |
else if (apiService instanceof SupportRequestApiService) | |
return new SupportRepositoryImpl((SupportRequestApiService) apiService, DataCacheFactory.getSupportSettingsDataCache()); | |
else if (apiService instanceof SyncApiService) | |
return new SyncRepositoryImpl((SyncApiService) apiService, | |
DataCacheFactory.getSyncDataCache(), | |
DataCacheFactory.getUserDataCache()); | |
else if (apiService instanceof BookmarkApiService) { | |
return new BookmarkRepositoryImpl((BookmarkApiService) apiService, | |
DataCacheFactory.getBookmarkDataCache()); | |
} else if (apiService instanceof FAQApiService) { | |
return new FAQRepositoryImpl((FAQApiService) apiService, | |
DataCacheFactory.getFAQDataCache()); | |
} | |
throw new IllegalStateException("Repository implementation not found"); | |
} | |
public static UserRepository getUserRepository(final UserApiService userApiService) { | |
return (UserRepository) getRepositoryByService(userApiService); | |
} | |
public static CategoriesRepository getCategoryRepository(final CategoryApiService categoryApiService) { | |
return (CategoriesRepository) getRepositoryByService(categoryApiService); | |
} | |
public static CountryRepository getCountryRepository(final CountryApiService countryApiService) { | |
return (CountryRepository) getRepositoryByService(countryApiService); | |
} | |
public static BookRepository getBookRepository(final BookApiService bookApiService) { | |
return (BookRepository) getRepositoryByService(bookApiService); | |
} | |
public static LibraryRepository getLibraryRepository(final LibraryApiService libraryApiService) { | |
return (LibraryRepository) getRepositoryByService(libraryApiService); | |
} | |
public static WishlistRepository getWishlistRepository(final WishlistApiService wishlistApiService) { | |
return (WishlistRepository) getRepositoryByService(wishlistApiService); | |
} | |
public static CartRepository getCartRepository(final CartApiService cartApiService) { | |
return (CartRepository) getRepositoryByService(cartApiService); | |
} | |
public static SocialAuthRepository getSocialAuthRepo(final SocialApiService socialApiService) { | |
return (SocialAuthRepository) getRepositoryByService(socialApiService); | |
} | |
public static FeedbackRepository getFeedbackRepository(final FeedbackApiService feedbackApiService) { | |
return (FeedbackRepository) getRepositoryByService(feedbackApiService); | |
} | |
public static SearchRepository getSearchRepository(final SearchApiService searchApiService) { | |
return (SearchRepository) getRepositoryByService(searchApiService); | |
} | |
public static ListeningTimeRepository getListeningTimeRepository(final ListeningTimeApiService listeningTimeApiService) { | |
return (ListeningTimeRepository) getRepositoryByService(listeningTimeApiService); | |
} | |
public static CreditRepository getCreditRepository(final CreditApiService creditApiService) { | |
return (CreditRepository) getRepositoryByService(creditApiService); | |
} | |
public static SyncRepository getSyncRepository(final SyncApiService syncApiService) { | |
return (SyncRepository) getRepositoryByService(syncApiService); | |
} | |
public static BookmarkRepository getBookmarkRepository(BookmarkApiService serviceFromConfiguration) { | |
return (BookmarkRepository) getRepositoryByService(serviceFromConfiguration); | |
} | |
public static FAQRepository getFaqRepository(final FAQApiService faqApiService) { | |
return (FAQRepository) getRepositoryByService(faqApiService); | |
} | |
public static SupportRepository getSupportRepository(final SupportRequestApiService supportRequestApiService) { | |
return (SupportRepository) getRepositoryByService(supportRequestApiService); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment