package org.wikipedia.readinglist.page.database.disk;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.wikipedia.database.async.AsyncRow;
public class DiskRow<T> extends AsyncRow<DiskStatus, T> {
private static final DiskStatus DEFAULT_STATUS = DiskStatus.ONLINE;
public DiskRow(@NonNull String key, @Nullable T dat) {
super(key, DEFAULT_STATUS, dat);
}
public DiskRow(@NonNull DiskRow<T> diskRow, @Nullable T dat) {
super(diskRow, dat);
}
public DiskRow(@NonNull String key, @NonNull DiskStatus status, long timestamp,
long transactionId) {
super(key, status, timestamp, transactionId);
}
@Override public boolean completable(@Nullable AsyncRow<DiskStatus, T> query) {
boolean recordable = !(query == null && (status() == DiskStatus.DELETED));
return super.completable(query) && recordable;
}
@Override public void completeTransaction(long timestamp) {
super.completeTransaction(timestamp);
resetTransaction(next(status()));
}
@NonNull private DiskStatus next(@NonNull DiskStatus current) {
switch (current) {
case ONLINE:
case SAVED:
case UNSAVED:
return DiskStatus.ONLINE;
case OUTDATED:
return DiskStatus.SAVED;
case DELETED:
return DiskStatus.DELETED;
default:
throw new RuntimeException("current=" + current);
}
}
}