package org.wikipedia.dataclient.page;
import android.support.annotation.NonNull;
import org.wikipedia.dataclient.WikiSite;
import org.wikipedia.dataclient.mwapi.page.MwPageClient;
import org.wikipedia.dataclient.mwapi.page.MwPageService;
import org.wikipedia.dataclient.restbase.page.RbPageClient;
import org.wikipedia.dataclient.restbase.page.RbPageService;
import org.wikipedia.dataclient.retrofit.MwCachedService;
import org.wikipedia.dataclient.retrofit.RbCachedService;
import org.wikipedia.dataclient.retrofit.WikiCachedService;
import org.wikipedia.page.Namespace;
import org.wikipedia.settings.RbSwitch;
/**
* This redirection exists because we want to be able to switch between the traditional
* MediaWiki PHP API and the new Nodejs Mobile Content Service hosted in the RESTBase
* infrastructure.
*/
public final class PageClientFactory {
@NonNull private static final WikiCachedService<RbPageService> RESTBASE_CACHE
= new RbCachedService<>(RbPageService.class);
@NonNull private static final WikiCachedService<MwPageService> MEDIAWIKI_CACHE
= new MwCachedService<>(MwPageService.class);
// TODO: remove the namespace check if and when Parsoid's handling of File pages is updated
// T135242
public static PageClient create(@NonNull WikiSite wiki, @NonNull Namespace namespace) {
if (RbSwitch.INSTANCE.isRestBaseEnabled(wiki) && !namespace.file()) {
return new RbPageClient(RESTBASE_CACHE.service(wiki));
}
return new MwPageClient(MEDIAWIKI_CACHE.service(wiki));
}
private PageClientFactory() { }
}