package org.aisen.wen.ui.model.impl;
import org.aisen.wen.component.network.task.TaskException;
import org.aisen.wen.support.paging.IPaging;
import org.aisen.wen.ui.model.IPagingModel;
import org.aisen.wen.ui.model.listener.ModelListenerParam;
import org.aisen.wen.ui.model.listener.PagingModelListenerParam;
import org.aisen.wen.ui.presenter.IContentPresenter;
import org.aisen.wen.ui.presenter.IPagingPresenter;
import java.io.Serializable;
/**
* Created by wangdan on 16/10/10.
*/
public abstract class APagingModel<Item extends Serializable,
Result extends Serializable>
extends AContentModel<Result>
implements IPagingModel<Item, Result> {
@Override
public void execute() {
execute(IPagingPresenter.RefreshMode.reset, null);
}
@Override
public void execute(IPagingPresenter.RefreshMode mode, IPaging<Item, Result> paging) {
new PagingTask(mode, paging).execute();
}
@Override
public Result workInBackground() throws TaskException {
throw new TaskException("not supported");
}
class PagingTask extends ContentModelTask {
IPagingPresenter.RefreshMode mode;
IPaging<Item, Result> paging;
public PagingTask(IPagingPresenter.RefreshMode mode, IPaging<Item, Result> paging) {
super();
this.mode = mode;
this.paging = paging;
}
@Override
public Result workInBackground(Void... params) throws TaskException {
return APagingModel.this.workInBackground(mode, paging);
}
@Override
ModelListenerParam getListenerParam(IContentPresenter.TaskState taskState, TaskException exception, Result result) {
return new PagingModelListenerParam(taskState, result, exception, mode);
}
}
/**
* 异步执行方法
*
* @param mode 刷新模式
* @param paging 分页
* @return
* @throws TaskException
*/
abstract protected Result workInBackground(IPagingPresenter.RefreshMode mode, IPaging<Item, Result> paging) throws TaskException;
}