jenkins-bot has submitted this change and it was merged.

Change subject: Add filename to Reading List page disk table
......................................................................


Add filename to Reading List page disk table

Add a filename column to the Reading List page disk database table. This
column is necessary to remember where files were stored.

The previous database schema has not been published through official
channels yet so the effort to upgrade from the previous to the new
has not been made. If you have installed a dev build with the current
schema, this change will cause a crash or undefined behavior. Please
clear your data.

Change-Id: I0e2c72e1b1d632b6be75bbd870d1b03ebcb690a7
---
M app/src/main/java/org/wikipedia/database/async/AsyncRow.java
M app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java
M app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
M 
app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDiskTable.java
M app/src/main/java/org/wikipedia/readinglist/page/database/disk/DiskRow.java
A 
app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListDiskRow.java
M 
app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java
7 files changed, 94 insertions(+), 24 deletions(-)

Approvals:
  Mholloway: Looks good to me, but someone else must approve
  Dbrant: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/app/src/main/java/org/wikipedia/database/async/AsyncRow.java 
b/app/src/main/java/org/wikipedia/database/async/AsyncRow.java
index 09a8f1b..20bbaf7 100644
--- a/app/src/main/java/org/wikipedia/database/async/AsyncRow.java
+++ b/app/src/main/java/org/wikipedia/database/async/AsyncRow.java
@@ -3,9 +3,10 @@
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
+import org.wikipedia.model.BaseModel;
 import org.wikipedia.model.EnumCode;
 
-public class AsyncRow<Status extends EnumCode, Dat> {
+public class AsyncRow<Status extends EnumCode, Dat> extends BaseModel {
     @Nullable private final Dat dat;
     @NonNull private final String key;
     @NonNull private Status status;
diff --git 
a/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java
 
b/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java
index b8e2bdc..ed65b4d 100644
--- 
a/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java
+++ 
b/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java
@@ -78,15 +78,21 @@
     }
 
     public static final DiskColumns<ReadingListPageRow> DISK_COLS = new 
DiskColumns<>(TABLE_DISK);
-    public interface DiskCol {
-        IdColumn ID = DISK_COLS.id();
-        StrColumn KEY = DISK_COLS.key();
-        CodeEnumColumn<DiskStatus> STATUS = DISK_COLS.status();
-        LongColumn TIMESTAMP = DISK_COLS.timestamp();
-        LongColumn TRANSACTION_ID = DISK_COLS.transactionId();
+    public static class DiskCol {
+        public static final IdColumn ID = DISK_COLS.id();
+        public static final StrColumn KEY = DISK_COLS.key();
+        public static final CodeEnumColumn<DiskStatus> STATUS = 
DISK_COLS.status();
+        public static final LongColumn TIMESTAMP = DISK_COLS.timestamp();
+        public static final LongColumn TRANSACTION_ID = 
DISK_COLS.transactionId();
+        public static final StrColumn FILENAME = new StrColumn(TABLE_DISK, 
"filename", "text");
 
-        String[] SELECTION = DISK_COLS.selection();
-        String[] CONTENT = DISK_COLS.content();
+        public static final String[] SELECTION = DISK_COLS.selection();
+        public static final String[] CONTENT;
+        static {
+            CONTENT = new String[DISK_COLS.content().length + 1];
+            System.arraycopy(DISK_COLS.content(), 0, CONTENT, 0, 
DISK_COLS.content().length);
+            CONTENT[DISK_COLS.content().length] = FILENAME.qualifiedName();
+        }
     }
 
     public interface Page extends PageCol {
@@ -114,8 +120,8 @@
         String[] PROJECTION = null;
     }
 
-    public interface Disk extends DiskCol {
-        String TABLES = TABLE_DISK;
+    public static final class Disk extends DiskCol {
+        public static final String TABLES = TABLE_DISK;
 
         // HACK: Http has no real dependency on Option. However, 
HttpWithOption is a composite of
         //       Option and Http and observers expect to be notified when 
_either_ change. Making
@@ -123,10 +129,12 @@
         //       notifies Http clients when Option changes. More here:
         //       - 
http://chalup.github.io/blog/2014/09/14/contentprovider-series-uris/
         //       - https://gist.github.com/chalup/4201307da02b9cfe4f40
-        String PATH = Page.PATH + "/disk";
+        public static final String PATH = Page.PATH + "/disk";
 
-        Uri URI = 
Uri.withAppendedPath(AppContentProviderContract.AUTHORITY_BASE, PATH);
-        String[] PROJECTION = null;
+        public static final Uri URI = 
Uri.withAppendedPath(AppContentProviderContract.AUTHORITY_BASE, PATH);
+        public static final String[] PROJECTION = null;
+
+        private Disk() { }
     }
 
     public static final class HttpWithPage implements Page {
@@ -168,6 +176,7 @@
         public static final CodeEnumColumn<DiskStatus> DISK_STATUS = 
DiskCol.STATUS;
         public static final LongColumn DISK_TIMESTAMP = DiskCol.TIMESTAMP;
         public static final LongColumn DISK_TRANSACTION_ID = 
DiskCol.TRANSACTION_ID;
+        public static final StrColumn DISK_FILENAME = DiskCol.FILENAME;
 
         public static final String[] PROJECTION;
         static {
@@ -193,6 +202,7 @@
         public static final CodeEnumColumn<DiskStatus> DISK_STATUS = 
DiskCol.STATUS;
         public static final LongColumn DISK_TIMESTAMP = DiskCol.TIMESTAMP;
         public static final LongColumn DISK_TRANSACTION_ID = 
DiskCol.TRANSACTION_ID;
+        public static final StrColumn DISK_FILENAME = DiskCol.FILENAME;
 
         public static final String[] PROJECTION;
         static {
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java 
b/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
index 4be22d5..08a381a 100644
--- a/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
+++ b/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
@@ -3,14 +3,14 @@
 import android.database.Cursor;
 import android.support.annotation.NonNull;
 
-import org.wikipedia.readinglist.page.database.disk.DiskRow;
 import org.wikipedia.readinglist.page.database.disk.DiskStatus;
+import org.wikipedia.readinglist.page.database.disk.ReadingListDiskRow;
 
 public final class ReadingListPage extends ReadingListPageRow {
     @NonNull private final DiskStatus diskStatus;
 
     public static ReadingListPage fromCursor(@NonNull Cursor cursor) {
-        DiskRow<ReadingListPageRow> diskRow = 
ReadingListPage.DISK_DATABASE_TABLE.fromCursor(cursor);
+        ReadingListDiskRow diskRow = 
ReadingListPage.DISK_DATABASE_TABLE.fromCursor(cursor);
         ReadingListPageRow row = 
ReadingListPage.DATABASE_TABLE.fromCursor(cursor);
         return builder()
                 .copy(row)
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDiskTable.java
 
b/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDiskTable.java
index 5bed525..07aa27d 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDiskTable.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDiskTable.java
@@ -1,24 +1,52 @@
 package org.wikipedia.readinglist.page.database;
 
+import android.content.ContentValues;
 import android.database.Cursor;
 import android.support.annotation.NonNull;
 
 import org.wikipedia.database.async.AsyncTable;
+import org.wikipedia.database.column.Column;
 import org.wikipedia.database.contract.ReadingListPageContract;
 import org.wikipedia.readinglist.page.ReadingListPageRow;
 import org.wikipedia.readinglist.page.database.disk.DiskRow;
 import org.wikipedia.readinglist.page.database.disk.DiskStatus;
+import org.wikipedia.readinglist.page.database.disk.ReadingListDiskRow;
 
 public class ReadingListPageDiskTable
         extends AsyncTable<DiskStatus, ReadingListPageRow, 
DiskRow<ReadingListPageRow>> {
     private static final int DATABASE_VERSION = 12;
 
     public ReadingListPageDiskTable() {
-        super(ReadingListPageContract.TABLE_DISK, 
ReadingListPageContract.Disk.URI, ReadingListPageContract.DISK_COLS);
+        super(ReadingListPageContract.TABLE_DISK, 
ReadingListPageContract.Disk.URI,
+                ReadingListPageContract.DISK_COLS);
     }
 
-    @Override public DiskRow<ReadingListPageRow> fromCursor(@NonNull Cursor 
cursor) {
-        return ReadingListPageContract.DISK_COLS.val(cursor);
+    @Override public ReadingListDiskRow fromCursor(@NonNull Cursor cursor) {
+        DiskRow<ReadingListPageRow> diskRow = 
ReadingListPageContract.DISK_COLS.val(cursor);
+        String filename = ReadingListPageContract.Disk.FILENAME.val(cursor);
+        return new ReadingListDiskRow(diskRow, null, filename);
+    }
+
+    @NonNull @Override public Column<?>[] getColumnsAdded(int version) {
+        switch (version) {
+            case DATABASE_VERSION:
+                Column<?>[] diskCols = super.getColumnsAdded(version);
+                Column<?>[] cols = new Column<?>[diskCols.length + 1];
+                System.arraycopy(diskCols, 0, cols, 0, diskCols.length);
+                cols[diskCols.length] = 
ReadingListPageContract.DiskCol.FILENAME;
+                return cols;
+            default:
+                return super.getColumnsAdded(version);
+        }
+    }
+
+    @Override protected ContentValues toContentValues(@NonNull 
DiskRow<ReadingListPageRow> row) {
+        ContentValues values = 
ReadingListPageContract.DISK_COLS.toContentValues(row);
+        if (row instanceof ReadingListDiskRow) {
+            ReadingListDiskRow diskRow = (ReadingListDiskRow) row;
+            values.put(ReadingListPageContract.Disk.FILENAME.getName(), 
diskRow.filename());
+        }
+        return values;
     }
 
     @Override protected int getDBVersionIntroducedAt() {
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/DiskRow.java 
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/DiskRow.java
index e2df0d1..800e0c8 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/DiskRow.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/DiskRow.java
@@ -12,8 +12,8 @@
         super(key, DEFAULT_STATUS, dat);
     }
 
-    public DiskRow(@NonNull DiskRow<T> httpRow, @Nullable T dat) {
-        super(httpRow, dat);
+    public DiskRow(@NonNull DiskRow<T> diskRow, @Nullable T dat) {
+        super(diskRow, dat);
     }
 
     public DiskRow(@NonNull String key, @NonNull DiskStatus status, long 
timestamp,
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListDiskRow.java
 
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListDiskRow.java
new file mode 100644
index 0000000..4a276b7
--- /dev/null
+++ 
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListDiskRow.java
@@ -0,0 +1,23 @@
+package org.wikipedia.readinglist.page.database.disk;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import org.wikipedia.readinglist.page.ReadingListPageRow;
+
+// TODO: rename to ReadingListPageDiskRow. I'm not sure what to call the 
current
+//       ReadingListPageDiskRow which contains an optional page model in 
addition to this class.
+public class ReadingListDiskRow extends DiskRow<ReadingListPageRow> {
+    @Nullable private final String filename;
+
+    public ReadingListDiskRow(@NonNull DiskRow<ReadingListPageRow> diskRow,
+                              @Nullable ReadingListPageRow dat,
+                              @Nullable String filename) {
+        super(diskRow, dat);
+        this.filename = filename;
+    }
+
+    @Nullable public String filename() {
+        return filename;
+    }
+}
\ No newline at end of file
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java
 
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java
index 60ac749..4a62a12 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java
@@ -9,8 +9,10 @@
 import org.wikipedia.readinglist.page.ReadingListPageRow;
 
 public class ReadingListPageDiskRow extends DiskRow<ReadingListPageRow> {
+    @Nullable private final String filename;
+
     public static ReadingListPageDiskRow fromCursor(@NonNull Cursor cursor) {
-        DiskRow<ReadingListPageRow> diskRow = 
ReadingListPage.DISK_DATABASE_TABLE.fromCursor(cursor);
+        ReadingListDiskRow diskRow = 
ReadingListPage.DISK_DATABASE_TABLE.fromCursor(cursor);
         boolean hasRow = 
cursor.getColumnIndex(ReadingListPageContract.DiskWithPage.KEY.getName()) != -1;
         ReadingListPageRow row = hasRow ? 
ReadingListPage.DATABASE_TABLE.fromCursor(cursor) : null;
         return new ReadingListPageDiskRow(diskRow, row);
@@ -18,10 +20,16 @@
 
     public ReadingListPageDiskRow(@NonNull ReadingListPage row) {
         super(row.key(), row);
+        filename = null;
     }
 
-    public ReadingListPageDiskRow(@NonNull DiskRow<ReadingListPageRow> diskRow,
+    public ReadingListPageDiskRow(@NonNull ReadingListDiskRow diskRow,
                                   @Nullable ReadingListPageRow row) {
         super(diskRow, row);
+        filename = diskRow.filename();
     }
-}
\ No newline at end of file
+
+    @Nullable public String filename() {
+        return filename;
+    }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/283701
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I0e2c72e1b1d632b6be75bbd870d1b03ebcb690a7
Gerrit-PatchSet: 3
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to