package org.wikipedia.readinglist.database; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import org.wikipedia.model.BaseModel; import org.wikipedia.readinglist.ReadingListData; import org.wikipedia.readinglist.page.database.ReadingListDaoProxy; import org.wikipedia.util.ValidateUtil; public class ReadingListRow extends BaseModel { public static final ReadingListData DAO = new ReadingListData(); public static final ReadingListTable DATABASE_TABLE = new ReadingListTable(); @NonNull private String key; @NonNull private String title; private final long mtime; private long atime; @Nullable private String description; public static Builder<?> builder() { //noinspection rawtypes return new Builder(); } @NonNull public String key() { return key; } @NonNull public String getTitle() { return title; } public void title(@NonNull String title) { this.title = title; key = ReadingListDaoProxy.listKey(title); } public long mtime() { return mtime; } public long atime() { return atime; } public void atime(long atime) { this.atime = atime; } @Nullable public String getDescription() { return description; } public void description(@Nullable String description) { this.description = description; } protected ReadingListRow(@NonNull Builder<?> builder) { key = builder.key; title = builder.title; mtime = builder.mtime; atime = builder.atime; description = builder.description; } @SuppressWarnings("unchecked") public static class Builder<Clazz extends Builder<Clazz>> { private String key; private String title; private Long mtime; private Long atime; private String description; public Clazz copy(@NonNull ReadingListRow copy) { return key(copy.key) .title(copy.title) .mtime(copy.mtime) .atime(copy.atime) .description(copy.description); } public Clazz key(@NonNull String key) { this.key = key; return (Clazz) this; } public Clazz title(@NonNull String title) { this.title = title; return (Clazz) this; } public Clazz mtime(long mtime) { this.mtime = mtime; return (Clazz) this; } public Clazz atime(long atime) { this.atime = atime; return (Clazz) this; } public Clazz description(@Nullable String description) { this.description = description; return (Clazz) this; } public ReadingListRow build() { validate(); return new ReadingListRow(this); } protected void validate() { ValidateUtil.noNullElements(key, title, mtime, atime); } } }