package starter.kit.util;
import java.util.ArrayList;
import rx.functions.Action1;
import starter.kit.model.entity.Entity;
public class RxIdentifier implements RxRequestKey {
private String sinceIdentifier; // 最新数据
private String maxIdentifier; // 更多数据
private final int pageSize;
private boolean hasMoreData;
private boolean isLoading;
private int size = 0; // 当前接收数据
private int requested = NOT_REQUESTED;
private Action1<RxIdentifier> onRequest;
public RxIdentifier(int pageSize, Action1<RxIdentifier> onRequest) {
this.pageSize = pageSize;
this.onRequest = onRequest;
this.hasMoreData = true;
this.isLoading = true;
}
@Override
public void received(ArrayList<? extends Entity> items) {
isLoading = false;
final int itemCount = items.size();
hasMoreData = itemCount >= pageSize;
size += itemCount;
requested = size;
if (isFirstPage()) {
// TODO
//sinceIdentifier = items.get(0).identifier;
maxIdentifier = null;
} else if (hasMoreData()) {
maxIdentifier = items.get(itemCount - 1).identifier;
//sinceIdentifier = null;
}
}
@Override
public void next() {
if (hasMoreData()) {
isLoading = true;
onRequest.call(this);
}
}
@Override
public void reset() {
size = 0;
isLoading = false;
maxIdentifier = null;
maxIdentifier = null;
this.hasMoreData = true;
requested = NOT_REQUESTED;
}
@Override
public boolean hasMoreData() {
return hasMoreData && size % pageSize == 0;
}
@Override
public String previousKey() {
return sinceIdentifier;
}
@Override
public String nextKey() {
return maxIdentifier;
}
@Override
public int pageSize() {
return pageSize;
}
@Override
public boolean isFirstPage() {
return requested == NOT_REQUESTED;
}
@Override
public boolean requested() {
return requested != NOT_REQUESTED;
}
@Override
public boolean isLoading() {
return isLoading;
}
}