package org.wikipedia.readinglist.page.database; import android.content.ContentValues; import android.database.Cursor; import android.support.annotation.NonNull; import org.wikipedia.database.DatabaseTable; import org.wikipedia.database.column.Column; import org.wikipedia.database.contract.ReadingListPageContract; import org.wikipedia.database.contract.ReadingListPageContract.PageCol; import org.wikipedia.dataclient.WikiSite; import org.wikipedia.readinglist.page.ReadingListPageRow; import java.util.ArrayList; import java.util.List; public class ReadingListPageTable extends DatabaseTable<ReadingListPageRow> { private static final int DB_VER_INTRODUCED = 12; private static final int DB_VER_SIZE_ADDED = 17; public ReadingListPageTable() { super(ReadingListPageContract.TABLE_PAGE, ReadingListPageContract.Page.URI); } @Override public ReadingListPageRow fromCursor(@NonNull Cursor cursor) { String lang = PageCol.LANG.val(cursor); String site = PageCol.SITE.val(cursor); return ReadingListPageRow .builder() .key(PageCol.KEY.val(cursor)) .listKeys(PageCol.LIST_KEYS.val(cursor)) .site(lang == null ? new WikiSite(site) : new WikiSite(site, lang)) .namespace(PageCol.NAMESPACE.val(cursor)) .title(PageCol.TITLE.val(cursor)) .diskPageRevision(PageCol.DISK_PAGE_REV.val(cursor)) .mtime(PageCol.MTIME.val(cursor)) .atime(PageCol.ATIME.val(cursor)) .thumbnailUrl(PageCol.THUMBNAIL_URL.val(cursor)) .description(PageCol.DESCRIPTION.val(cursor)) .physicalSize(PageCol.PHYSICAL_SIZE.val(cursor)) .logicalSize(PageCol.LOGICAL_SIZE.val(cursor)) .build(); } @NonNull @Override public Column<?>[] getColumnsAdded(int version) { switch (version) { case DB_VER_INTRODUCED: List<Column<?>> cols = new ArrayList<>(); cols.add(PageCol.ID); cols.add(PageCol.KEY); cols.add(PageCol.LIST_KEYS); cols.add(PageCol.SITE); cols.add(PageCol.LANG); cols.add(PageCol.NAMESPACE); cols.add(PageCol.TITLE); cols.add(PageCol.DISK_PAGE_REV); cols.add(PageCol.MTIME); cols.add(PageCol.ATIME); cols.add(PageCol.THUMBNAIL_URL); cols.add(PageCol.DESCRIPTION); return cols.toArray(new Column<?>[cols.size()]); case DB_VER_SIZE_ADDED: return new Column<?>[]{PageCol.PHYSICAL_SIZE, PageCol.LOGICAL_SIZE}; default: return super.getColumnsAdded(version); } } @Override protected ContentValues toContentValues(ReadingListPageRow row) { ContentValues contentValues = new ContentValues(); contentValues.put(PageCol.KEY.getName(), row.key()); PageCol.LIST_KEYS.put(contentValues, row.listKeys()); contentValues.put(PageCol.SITE.getName(), row.wikiSite().authority()); contentValues.put(PageCol.LANG.getName(), row.wikiSite().languageCode()); contentValues.put(PageCol.NAMESPACE.getName(), row.namespace().code()); contentValues.put(PageCol.TITLE.getName(), row.title()); contentValues.put(PageCol.DISK_PAGE_REV.getName(), row.diskPageRevision()); contentValues.put(PageCol.MTIME.getName(), row.mtime()); contentValues.put(PageCol.ATIME.getName(), row.atime()); contentValues.put(PageCol.THUMBNAIL_URL.getName(), row.thumbnailUrl()); contentValues.put(PageCol.DESCRIPTION.getName(), row.description()); contentValues.put(PageCol.PHYSICAL_SIZE.getName(), row.physicalSize()); contentValues.put(PageCol.LOGICAL_SIZE.getName(), row.logicalSize()); return contentValues; } @Override protected String getPrimaryKeySelection(@NonNull ReadingListPageRow row, @NonNull String[] selectionArgs) { return super.getPrimaryKeySelection(row, ReadingListPageContract.Page.SELECTION); } @Override protected String[] getUnfilteredPrimaryKeySelectionArgs(@NonNull ReadingListPageRow row) { return new String[] {row.key()}; } @Override protected int getDBVersionIntroducedAt() { return DB_VER_INTRODUCED; } }