X-Git-Url: https://git.mdrn.pl/wl-app.git/blobdiff_plain/48b2fe9f7c2dc3d9aeaaa6dbfb27c7da4f3235ff..269195b3729c1bdc22e9053ee4ebca667ea8549d:/Android/app/src/main/java/com/moiseum/wolnelektury/base/DataProvider.java diff --git a/Android/app/src/main/java/com/moiseum/wolnelektury/base/DataProvider.java b/Android/app/src/main/java/com/moiseum/wolnelektury/base/DataProvider.java new file mode 100644 index 0000000..a0663ba --- /dev/null +++ b/Android/app/src/main/java/com/moiseum/wolnelektury/base/DataProvider.java @@ -0,0 +1,75 @@ +package com.moiseum.wolnelektury.base; + +import android.util.Log; + +import com.moiseum.wolnelektury.connection.RestClientCallback; + +import javax.annotation.Nullable; + +import retrofit2.Call; + +/** + * @author golonkos. + */ + +public abstract class DataProvider extends RestClientCallback { + + private final static String TAG = DataProvider.class.getSimpleName(); + + protected DataObserver dataObserver; + protected String lastKeySlug = null; + private Call call; + + public DataProvider() { + } + + public void setDataObserver(DataObserver dataObserver) { + this.dataObserver = dataObserver; + } + + @Override + public void onSuccess(T data) { + if (dataObserver != null) { + dataObserver.onLoadSuccess(data); + } + } + + @Override + public void onFailure(Exception e) { + Log.e(TAG, "Failed to load data", e); + if (dataObserver != null) { + dataObserver.onLoadFailed(e); + } + } + + @Override + public void onCancel() { + //nop + } + + /** + * Invoked in order to load data. + * @param lastKey Last book slug for pagination. Can be null if there is no pagination. + */ + public void load(@Nullable String lastKey) { + cancel(); + lastKeySlug = lastKey; + call = WLApplication.getInstance().getRestClient().call(this, getServiceClass()); + if (dataObserver != null) { + dataObserver.onLoadStarted(); + } + } + + public void cancel() { + if (call != null) { + call.cancel(); + call = null; + } + } + + public void release() { + dataObserver = null; + } + + protected abstract Class getServiceClass(); +}