package com.boardgamegeek.export;
import android.content.ContentProviderOperation;
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 com.boardgamegeek.R;
import com.boardgamegeek.export.model.CollectionView;
import com.boardgamegeek.export.model.Filter;
import com.boardgamegeek.provider.BggContract.CollectionViewFilters;
import com.boardgamegeek.provider.BggContract.CollectionViews;
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;
public class CollectionViewStep implements Step {
@NonNull
@Override
public String getFileName() {
return "collection-views.json";
}
@NonNull
@Override
public String getDescription(@NonNull Context context) {
return context.getString(R.string.backup_type_collection_view);
}
@Nullable
@Override
public Cursor getCursor(@NonNull Context context) {
return context.getContentResolver().query(
CollectionViews.CONTENT_URI,
CollectionView.PROJECTION,
null, null, null);
}
@Override
public void writeJsonRecord(@NonNull Context context, @NonNull Cursor cursor, @NonNull Gson gson, @NonNull JsonWriter writer) {
CollectionView cv = CollectionView.fromCursor(cursor);
cv.addFilters(context);
gson.toJson(cv, CollectionView.class, writer);
}
@Override
public void initializeImport(@NonNull Context context) {
context.getContentResolver().delete(CollectionViews.CONTENT_URI, null, null);
}
@Override
public void importRecord(@NonNull Context context, @NonNull Gson gson, @NonNull JsonReader reader) {
CollectionView cv = gson.fromJson(reader, CollectionView.class);
ContentResolver resolver = context.getContentResolver();
ContentValues values = new ContentValues();
values.put(CollectionViews.NAME, cv.getName());
values.put(CollectionViews.STARRED, cv.isStarred());
values.put(CollectionViews.SORT_TYPE, cv.getSortType());
Uri uri = resolver.insert(CollectionViews.CONTENT_URI, values);
if (cv.getFilters() == null || cv.getFilters().size() == 0) {
return;
}
int viewId = CollectionViews.getViewId(uri);
Uri filterUri = CollectionViews.buildViewFilterUri(viewId);
ArrayList<ContentProviderOperation> batch = new ArrayList<>();
for (Filter filter : cv.getFilters()) {
ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(filterUri);
builder.withValue(CollectionViewFilters.TYPE, filter.getType());
builder.withValue(CollectionViewFilters.DATA, filter.getData());
batch.add(builder.build());
}
ResolverUtils.applyBatch(context, batch);
}
}