package org.wikipedia.database.contract;
import android.net.Uri;
import org.wikipedia.database.DbUtil;
import org.wikipedia.database.column.CodeEnumColumn;
import org.wikipedia.database.column.CsvColumn;
import org.wikipedia.database.column.IdColumn;
import org.wikipedia.database.column.IntColumn;
import org.wikipedia.database.column.LongColumn;
import org.wikipedia.database.column.NamespaceColumn;
import org.wikipedia.database.column.StrColumn;
import org.wikipedia.readinglist.page.database.disk.DiskStatus;
import java.util.Set;
@SuppressWarnings("checkstyle:interfaceistype")
public interface ReadingListContract {
String TABLE = "readinglist";
interface Col {
IdColumn ID = new IdColumn(TABLE);
StrColumn KEY = new StrColumn(TABLE, "readingListKey", "text not null unique");
StrColumn TITLE = new StrColumn(TABLE, "readingListTitle", "text not null");
LongColumn MTIME = new LongColumn(TABLE, "readingListMtime", "integer not null");
LongColumn ATIME = new LongColumn(TABLE, "readingListAtime", "integer not null");
StrColumn DESCRIPTION = new StrColumn(TABLE, "readingListDescription", "text");
String[] SELECTION = DbUtil.qualifiedNames(KEY);
String[] ALL = DbUtil.qualifiedNames(ID, KEY, TITLE, MTIME, ATIME, DESCRIPTION);
}
interface List extends Col {
String TABLES = TABLE;
String PATH = ReadingListPageContract.Disk.PATH + "/list";
Uri URI = Uri.withAppendedPath(AppContentProviderContract.AUTHORITY_BASE, PATH);
String[] PROJECTION = null;
String ORDER_KEY = KEY.qualifiedName();
String ORDER_MRU = ":atimeCol desc".replaceAll(":atimeCol", ATIME.qualifiedName());
}
final class ListWithPagesAndDisk implements List {
public static final String PATH = List.PATH + "/with_page";
public static final Uri URI = Uri.withAppendedPath(AppContentProviderContract.AUTHORITY_BASE, PATH);
public static final StrColumn PAGE_KEY = ReadingListPageContract.PageCol.KEY;
public static final CsvColumn<Set<String>> PAGE_LIST_KEYS = ReadingListPageContract.PageCol.LIST_KEYS;
public static final StrColumn PAGE_LANG = ReadingListPageContract.PageCol.LANG;
public static final NamespaceColumn PAGE_NAMESPACE = ReadingListPageContract.PageCol.NAMESPACE;
public static final StrColumn PAGE_TITLE = ReadingListPageContract.PageCol.TITLE;
public static final IntColumn PAGE_DISK_PAGE_REV = ReadingListPageContract.PageCol.DISK_PAGE_REV;
public static final LongColumn PAGE_MTIME = ReadingListPageContract.PageCol.MTIME;
public static final LongColumn PAGE_ATIME = ReadingListPageContract.PageCol.ATIME;
public static final StrColumn PAGE_THUMBNAIL_URL = ReadingListPageContract.PageCol.THUMBNAIL_URL;
public static final StrColumn PAGE_DESCRIPTION = ReadingListPageContract.PageCol.DESCRIPTION;
public static final StrColumn PAGE_DISK_KEY = ReadingListPageContract.DiskCol.KEY;
public static final CodeEnumColumn<DiskStatus> PAGE_DISK_STATUS = ReadingListPageContract.DiskCol.STATUS;
public static final LongColumn PAGE_DISK_TIMESTAMP = ReadingListPageContract.DiskCol.TIMESTAMP;
public static final LongColumn PAGE_DISK_TRANSACTION_ID = ReadingListPageContract.DiskCol.TRANSACTION_ID;
public static final StrColumn PAGE_DISK_FILENAME = ReadingListPageContract.DiskCol.FILENAME;
public static final String TABLES = (
":tbl left join :pageTbl on (',' || :pageTbl.listKeysCol || ',') like ('%,' || :tbl.keyCol || ',%') "
+ "left join :diskTbl on :diskTbl.keyCol = :pageTbl.keyCol")
.replaceAll(":tbl.keyCol", KEY.qualifiedName())
.replaceAll(":pageTbl.listKeysCol", PAGE_LIST_KEYS.qualifiedName())
.replaceAll(":diskTbl.keyCol", PAGE_DISK_KEY.qualifiedName())
.replaceAll(":pageTbl.keyCol", PAGE_KEY.qualifiedName())
.replaceAll(":tbl", TABLE)
.replaceAll(":pageTbl", ReadingListPageContract.TABLE_PAGE)
.replaceAll(":diskTbl", ReadingListPageContract.TABLE_DISK);
public static final String[] PROJECTION;
static {
PROJECTION = new String[ALL.length + ReadingListPageContract.PageCol.CONTENT.length + ReadingListPageContract.DiskCol.CONTENT.length];
System.arraycopy(ALL, 0, PROJECTION, 0, ALL.length);
System.arraycopy(ReadingListPageContract.PageCol.CONTENT, 0, PROJECTION, ALL.length,
ReadingListPageContract.PageCol.CONTENT.length);
System.arraycopy(ReadingListPageContract.DiskCol.CONTENT, 0, PROJECTION,
ALL.length + ReadingListPageContract.PageCol.CONTENT.length,
ReadingListPageContract.DiskCol.CONTENT.length);
}
private ListWithPagesAndDisk() { }
}
}