package com.alorma.github.presenter;
import core.datasource.CacheDataSource;
import core.datasource.SdkItem;
import rx.Observable;
/**
* Abstract class for caching SdkItem<Data> objects by some key.
* This class also provides method for receiving SdkItem<Data> object as observable.
*
* @param <Request> uses it for
*/
public abstract class AbstractCacheDataSource<Request, Data> implements CacheDataSource<Request, Data> {
@Override
public void saveData(SdkItem<Request> request, SdkItem<Data> data) {
CacheWrapper.cache().set(getCacheKey(request.getK(), request.getPage()), data);
}
@Override
public Observable<SdkItem<Data>> getData(SdkItem<Request> request) {
SdkItem<Data> sdkItem = CacheWrapper.cache().get(getCacheKey(request.getK(), request.getPage()));
if (checkItemIsEmpty(sdkItem)) {
return Observable.empty();
} else {
return Observable.just(sdkItem);
}
}
protected boolean checkItemIsEmpty(SdkItem<Data> sdkItem) {
return sdkItem == null || sdkItem.getK() == null;
}
protected abstract String getCacheKey(Request k, Integer page);
}