package org.wikipedia.readinglist.page;
import android.database.Cursor;
import android.support.annotation.NonNull;
import org.apache.commons.lang3.Validate;
import org.wikipedia.readinglist.page.database.disk.DiskStatus;
import org.wikipedia.readinglist.page.database.disk.ReadingListPageDiskRow;
public final class ReadingListPage extends ReadingListPageRow {
@NonNull private DiskStatus diskStatus;
private boolean selected;
public static ReadingListPage fromCursor(@NonNull Cursor cursor) {
ReadingListPageDiskRow diskRow = ReadingListPage.DISK_DATABASE_TABLE.fromCursor(cursor);
ReadingListPageRow row = ReadingListPage.DATABASE_TABLE.fromCursor(cursor);
return builder()
.copy(row)
.diskStatus(diskRow.status())
.build();
}
public static Builder builder() {
return new Builder();
}
@NonNull public DiskStatus diskStatus() {
return diskStatus;
}
public boolean isOffline() {
return diskStatus.savedOrSaving();
}
public void setOffline(boolean offline) {
if (offline) {
diskStatus = diskStatus == DiskStatus.SAVED ? DiskStatus.SAVED : DiskStatus.OUTDATED;
} else {
diskStatus = diskStatus == DiskStatus.ONLINE ? DiskStatus.ONLINE : DiskStatus.UNSAVED;
}
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public boolean isSelected() {
return selected;
}
private ReadingListPage(@NonNull Builder builder) {
super(builder);
diskStatus = builder.diskStatus;
}
public static class Builder extends ReadingListPageRow.Builder<Builder> {
private DiskStatus diskStatus;
public Builder copy(@NonNull ReadingListPage copy) {
super.copy(copy);
diskStatus = copy.diskStatus;
return this;
}
public Builder diskStatus(@NonNull DiskStatus diskStatus) {
this.diskStatus = diskStatus;
return this;
}
@Override public ReadingListPage build() {
validate();
return new ReadingListPage(this);
}
@Override protected void validate() {
super.validate();
Validate.notNull(diskStatus);
}
}
}