package com.boardgamegeek.provider;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.support.annotation.NonNull;
import android.support.v4.util.SimpleArrayMap;
import java.io.FileNotFoundException;
import hugo.weaving.DebugLog;
public class BggProvider extends ContentProvider {
private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
private static final SimpleArrayMap<Integer, BaseProvider> PROVIDERS = buildProviderMap();
private static int URI_MATCH_CODE = 1;
private BggDatabase openHelper;
@DebugLog
private static SimpleArrayMap<Integer, BaseProvider> buildProviderMap() {
SimpleArrayMap<Integer, BaseProvider> map = new SimpleArrayMap<>();
addProvider(map, new GamesProvider());
addProvider(map, new GamesIdProvider());
addProvider(map, new GamesIdRankProvider());
addProvider(map, new GamesIdRankIdProvider());
addProvider(map, new GamesIdExpansionsProvider());
addProvider(map, new GamesIdExpansionsIdProvider());
addProvider(map, new GamesIdDesignersProvider());
addProvider(map, new GamesIdDesignersIdProvider());
addProvider(map, new GamesIdArtistsProvider());
addProvider(map, new GamesIdArtistsIdProvider());
addProvider(map, new GamesIdPublishersProvider());
addProvider(map, new GamesIdPublishersIdProvider());
addProvider(map, new GamesIdCategoriesProvider());
addProvider(map, new GamesIdCategoriesIdProvider());
addProvider(map, new GamesIdMechanicsProvider());
addProvider(map, new GamesIdMechanicsIdProvider());
addProvider(map, new GamesRanksProvider());
addProvider(map, new GamesRanksIdProvider());
addProvider(map, new GamesDesignersIdProvider());
addProvider(map, new GamesArtistsIdProvider());
addProvider(map, new GamesPublishersIdProvider());
addProvider(map, new GamesMechanicsIdProvider());
addProvider(map, new GamesCategoriesIdProvider());
addProvider(map, new GamesIdPollsProvider());
addProvider(map, new GamesIdPollsNameProvider());
addProvider(map, new GamesIdPollsNameResultsProvider());
addProvider(map, new GamesIdPollsNameResultsResultProvider());
addProvider(map, new GamesIdPollsNameResultsKeyProvider());
addProvider(map, new GamesIdPollsNameResultsKeyResultProvider());
addProvider(map, new GamesIdPollsNameResultsKeyResultKeyProvider());
addProvider(map, new GamesIdColorsProvider());
addProvider(map, new GamesIdColorsNameProvider());
addProvider(map, new GamesIdPlaysProvider());
addProvider(map, new DesignersProvider());
addProvider(map, new DesignersIdProvider());
addProvider(map, new ArtistsProvider());
addProvider(map, new ArtistsIdProvider());
addProvider(map, new PublishersProvider());
addProvider(map, new PublishersIdProvider());
addProvider(map, new MechanicsProvider());
addProvider(map, new MechanicsIdProvider());
addProvider(map, new CategoriesProvider());
addProvider(map, new CategoriesIdProvider());
addProvider(map, new CollectionProvider());
addProvider(map, new CollectionIdProvider());
addProvider(map, new PlaysProvider());
addProvider(map, new PlaysIdProvider());
addProvider(map, new PlaysIdPlayersProvider());
addProvider(map, new PlaysIdPlayersIdProvider());
addProvider(map, new PlaysLocationsProvider());
addProvider(map, new PlaysPlayersProvider());
addProvider(map, new CollectionViewProvider());
addProvider(map, new CollectionViewIdProvider());
addProvider(map, new CollectionViewIdFiltersProvider());
addProvider(map, new CollectionViewIdFiltersIdProvider());
addProvider(map, new BuddiesProvider());
addProvider(map, new BuddiesIdProvider());
addProvider(map, new ThumbnailsProvider());
addProvider(map, new ThumbnailsIdProvider());
addProvider(map, new GamesIdThumbnailProvider());
addProvider(map, new CollectionIdThumbnailProvider());
addProvider(map, new AvatarsProvider());
addProvider(map, new AvatarsIdProvider());
addProvider(map, new BuddiesIdAvatarProvider());
addProvider(map, new SearchSuggestProvider());
addProvider(map, new SearchSuggestTextProvider());
addProvider(map, new SearchRefreshProvider());
addProvider(map, new PlayerColorsProvider());
addProvider(map, new UsersNameColorsProvider());
addProvider(map, new UsersNameColorsOrderProvider());
addProvider(map, new PlayersNameColorsProvider());
addProvider(map, new PlayersNameColorsOrderProvider());
return map;
}
@DebugLog
private static void addProvider(SimpleArrayMap<Integer, BaseProvider> map, BaseProvider provider) {
URI_MATCH_CODE++;
URI_MATCHER.addURI(BggContract.CONTENT_AUTHORITY, provider.getPath(), URI_MATCH_CODE);
map.put(URI_MATCH_CODE, provider);
}
@DebugLog
@Override
public boolean onCreate() {
openHelper = new BggDatabase(getContext());
return true;
}
@DebugLog
@Override
public String getType(@NonNull Uri uri) {
return getProvider(uri).getType(uri);
}
@DebugLog
@Override
public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = openHelper.getReadableDatabase();
if (getContext() != null) {
Cursor cursor = getProvider(uri).query(getContext().getContentResolver(), db, uri, projection, selection, selectionArgs, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
} else {
return null;
}
}
@DebugLog
@Override
public Uri insert(@NonNull Uri uri, ContentValues values) {
SQLiteDatabase db = openHelper.getWritableDatabase();
Uri newUri = getProvider(uri).insert(getContext(), db, uri, values);
if (newUri != null & getContext() != null) {
getContext().getContentResolver().notifyChange(newUri, null);
}
return newUri;
}
@DebugLog
@Override
public int update(@NonNull Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return getProvider(uri).update(getContext(), openHelper.getWritableDatabase(), uri, values, selection, selectionArgs);
}
@DebugLog
@Override
public int delete(@NonNull Uri uri, String selection, String[] selectionArgs) {
BaseProvider provider = getProvider(uri);
return provider.delete(getContext(), openHelper.getWritableDatabase(), uri, selection, selectionArgs);
}
@DebugLog
@Override
public ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode) throws FileNotFoundException {
BaseProvider provider = getProvider(uri);
return provider.openFile(getContext(), uri, mode);
}
@DebugLog
private BaseProvider getProvider(Uri uri) {
int match = URI_MATCHER.match(uri);
if (PROVIDERS.containsKey(match)) {
return PROVIDERS.get(match);
}
throw new UnsupportedOperationException("Unknown uri: " + uri);
}
}