Skip to content

Instantly share code, notes, and snippets.

@mondoktamas
Created December 30, 2016 09:37
Show Gist options
  • Save mondoktamas/1ec92975c61daeb3ebfe7a6d7b4d5dd9 to your computer and use it in GitHub Desktop.
Save mondoktamas/1ec92975c61daeb3ebfe7a6d7b4d5dd9 to your computer and use it in GitHub Desktop.
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