package treehou.se.habit.data;
import android.content.Context;
import android.support.v4.util.Pair;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import io.realm.Realm;
import rx.Observable;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
import se.treehou.ng.ohcommunicator.connector.models.OHServer;
import se.treehou.ng.ohcommunicator.connector.models.OHSitemap;
import se.treehou.ng.ohcommunicator.services.IServerHandler;
import treehou.se.habit.HabitApplication;
import treehou.se.habit.core.db.model.ServerDB;
import treehou.se.habit.module.ServerLoaderFactory;
import treehou.se.habit.util.ConnectionFactory;
import treehou.se.habit.util.RxUtil;
public class TestServerLoaderFactory implements ServerLoaderFactory {
private ConnectionFactory connectionFactory;
@Inject
public TestServerLoaderFactory(ConnectionFactory connectionFactory) {
this.connectionFactory = connectionFactory;
}
@Override
public OHServer loadServer(Realm realm, long serverId) {
return ServerDB.load(realm, serverId).toGeneric();
}
@Override
public Observable.Transformer<Realm, OHServer> loadServersRx() {
return RxUtil.loadServers();
}
@Override
public Observable.Transformer<Pair<OHServer, List<OHSitemap>>, Pair<OHServer, List<OHSitemap>>> filterDisplaySitemaps() {
return observable -> observable;
}
/**
* Fetches sitemaps from server.
* @param context the used to fetch sitemaps.
* @return
*/
public Observable.Transformer<OHServer, Pair<OHServer, List<OHSitemap>>> serverToSitemap(Context context) {
return observable -> observable.flatMap(new Func1<OHServer, Observable<List<OHSitemap>>>() {
@Override
public Observable<List<OHSitemap>> call(OHServer server) {
IServerHandler serverHandler = connectionFactory.createServerHandler(server, context);
return serverHandler.requestSitemapObservable().subscribeOn(Schedulers.io())
.onErrorReturn(throwable -> new ArrayList<>());
}
}, (server, sitemaps) -> {
for (OHSitemap sitemap : sitemaps) {
sitemap.setServer(server);
}
return new Pair<>(server, sitemaps);
})
.doOnNext(RxUtil.saveSitemap());
}
}