package org.wikipedia.database;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.wikipedia.database.contract.AppContentProviderContract;
import org.wikipedia.database.contract.EditHistoryContract;
import org.wikipedia.database.contract.PageHistoryContract;
import org.wikipedia.database.contract.PageImageHistoryContract;
import org.wikipedia.database.contract.ReadingListContract;
import org.wikipedia.database.contract.ReadingListPageContract;
import org.wikipedia.database.contract.SearchHistoryContract;
import org.wikipedia.database.contract.UserOptionContract;
import org.wikipedia.model.EnumCode;
import org.wikipedia.model.EnumCodeMap;
public enum AppContentProviderEndpoint implements EnumCode {
HISTORY_PAGE(100, PageHistoryContract.Page.PATH, PageHistoryContract.Page.TABLES,
PageHistoryContract.Page.PROJECTION),
HISTORY_PAGE_IMAGE(101, PageImageHistoryContract.Image.PATH,
PageImageHistoryContract.Image.TABLES, PageImageHistoryContract.Image.PROJECTION),
HISTORY_PAGE_WITH_IMAGE(102, PageHistoryContract.PageWithImage.PATH,
PageHistoryContract.PageWithImage.TABLES, PageHistoryContract.PageWithImage.PROJECTION),
HISTORY_EDIT_SUMMARY(103, EditHistoryContract.Summary.PATH, EditHistoryContract.Summary.TABLES,
EditHistoryContract.Summary.PROJECTION),
HISTORY_SEARCH_QUERY(104, SearchHistoryContract.Query.PATH, SearchHistoryContract.Query.TABLES,
SearchHistoryContract.Query.PROJECTION),
USER_OPTION(300, UserOptionContract.AUTHORITY, UserOptionContract.Option.PATH,
UserOptionContract.Option.TABLES, UserOptionContract.Option.PROJECTION),
USER_OPTION_HTTP(301, UserOptionContract.AUTHORITY, UserOptionContract.Http.PATH,
UserOptionContract.Http.TABLES, UserOptionContract.Http.PROJECTION),
USER_HTTP_WITH_OPTION(302, UserOptionContract.AUTHORITY, UserOptionContract.HttpWithOption.PATH,
UserOptionContract.HttpWithOption.TABLES, UserOptionContract.HttpWithOption.PROJECTION),
READING_LIST_PAGE(400, ReadingListPageContract.Page.PATH, ReadingListPageContract.Page.TABLES,
ReadingListPageContract.Page.PROJECTION),
READING_LIST_PAGE_HTTP(401, ReadingListPageContract.Http.PATH,
ReadingListPageContract.Http.TABLES, ReadingListPageContract.Http.PROJECTION),
READING_LIST_PAGE_DISK(402, ReadingListPageContract.Disk.PATH,
ReadingListPageContract.Disk.TABLES, ReadingListPageContract.Disk.PROJECTION),
READING_LIST_HTTP_WITH_PAGE(403, ReadingListPageContract.HttpWithPage.PATH,
ReadingListPageContract.HttpWithPage.TABLES,
ReadingListPageContract.HttpWithPage.PROJECTION),
READING_LIST_DISK_WITH_PAGE(404, ReadingListPageContract.DiskWithPage.PATH,
ReadingListPageContract.DiskWithPage.TABLES,
ReadingListPageContract.DiskWithPage.PROJECTION),
READING_LIST_PAGE_WITH_DISK(405, ReadingListPageContract.PageWithDisk.PATH,
ReadingListPageContract.PageWithDisk.TABLES,
ReadingListPageContract.PageWithDisk.PROJECTION),
READING_LIST(406, ReadingListContract.List.PATH, ReadingListContract.List.TABLES,
ReadingListContract.List.PROJECTION),
READING_LIST_WITH_PAGES_AND_DISK(407, ReadingListContract.ListWithPagesAndDisk.PATH,
ReadingListContract.ListWithPagesAndDisk.TABLES,
ReadingListContract.ListWithPagesAndDisk.PROJECTION);
private static final EnumCodeMap<AppContentProviderEndpoint> CODE_TO_ENUM = new EnumCodeMap<>(AppContentProviderEndpoint.class);
private static final UriMatcher URI_TO_CODE = newUriToCode();
private final int code;
@NonNull private final String authority;
@NonNull private final String path;
@NonNull private final String tables;
@Nullable private final String[] projection;
@NonNull public static AppContentProviderEndpoint of(@NonNull Uri uri) {
int code = URI_TO_CODE.match(uri);
if (code == UriMatcher.NO_MATCH) {
throw new IllegalArgumentException("uri=" + uri);
}
return of(code);
}
@Override public int code() {
return code;
}
@NonNull public String tables() {
return tables;
}
@Nullable public String[] projection() {
return projection;
}
@Nullable public String type() {
return null;
}
@Nullable public Uri itemUri(@NonNull ContentValues values) {
return null;
}
AppContentProviderEndpoint(int code, @NonNull String path, @NonNull String tables,
@Nullable String[] projection) {
this(code, AppContentProviderContract.AUTHORITY, path, tables, projection);
}
AppContentProviderEndpoint(int code, @NonNull String authority, @NonNull String path,
@NonNull String tables, @Nullable String[] projection) {
this.code = code;
this.authority = authority;
this.path = path;
this.tables = tables;
this.projection = projection;
}
@NonNull private static AppContentProviderEndpoint of(int code) {
return CODE_TO_ENUM.get(code);
}
private static UriMatcher newUriToCode() {
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
for (AppContentProviderEndpoint value : AppContentProviderEndpoint.values()) {
matcher.addURI(value.authority, value.path, value.code);
}
return matcher;
}
}