package com.boardgamegeek.export;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.boardgamegeek.R;
import com.boardgamegeek.export.model.Color;
import com.boardgamegeek.export.model.Game;
import com.boardgamegeek.provider.BggContract.GameColors;
import com.boardgamegeek.provider.BggContract.Games;
import com.boardgamegeek.util.ResolverUtils;
import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.util.ArrayList;
import java.util.List;
public class GameStep implements Step {
@NonNull
@Override
public String getFileName() {
return "games.json";
}
@NonNull
@Override
public String getDescription(@NonNull Context context) {
return context.getString(R.string.backup_type_game);
}
@Nullable
@Override
public Cursor getCursor(@NonNull Context context) {
return context.getContentResolver().query(
Games.CONTENT_URI,
Game.PROJECTION,
null, null, null);
}
@Override
public void writeJsonRecord(@NonNull Context context, @NonNull Cursor cursor, @NonNull Gson gson, @NonNull JsonWriter writer) {
Game game = Game.fromCursor(cursor);
game.addColors(context);
if (game.hasColors()) {
gson.toJson(game, Game.class, writer);
}
}
@Override
public void initializeImport(Context context) {
}
@Override
public void importRecord(@NonNull Context context, @NonNull Gson gson, @NonNull JsonReader reader) {
Game game = gson.fromJson(reader, Game.class);
ContentResolver resolver = context.getContentResolver();
int gameId = game.getGameId();
if (ResolverUtils.rowExists(resolver, Games.buildGameUri(gameId))) {
final Uri gameColorsUri = Games.buildColorsUri(gameId);
resolver.delete(gameColorsUri, null, null);
List<ContentValues> values = new ArrayList<>();
for (Color color : game.getColors()) {
if (!TextUtils.isEmpty(color.getColor())) {
ContentValues cv = new ContentValues();
cv.put(GameColors.COLOR, color.getColor());
values.add(cv);
}
}
if (values.size() > 0) {
ContentValues[] array = {};
resolver.bulkInsert(gameColorsUri, values.toArray(array));
}
}
}
}