package com.orgzly.android.provider.clients; import android.content.ContentProviderOperation; import android.content.ContentValues; import android.content.Context; import android.content.OperationApplicationException; import android.database.Cursor; import android.net.Uri; import android.os.RemoteException; import com.orgzly.android.provider.ProviderContract; import com.orgzly.android.repos.Rook; import com.orgzly.android.repos.VersionedRook; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * */ public class CurrentRooksClient { private static void toContentValues(ContentValues values, VersionedRook vrook) { values.put(ProviderContract.CurrentRooks.Param.REPO_URL, vrook.getRepoUri().toString()); values.put(ProviderContract.CurrentRooks.Param.ROOK_URL, vrook.getUri().toString()); values.put(ProviderContract.CurrentRooks.Param.ROOK_REVISION, vrook.getRevision()); values.put(ProviderContract.CurrentRooks.Param.ROOK_MTIME, vrook.getMtime()); } private static VersionedRook fromCursor(Cursor cursor) { return new VersionedRook( Uri.parse(cursor.getString(cursor.getColumnIndexOrThrow(ProviderContract.CurrentRooks.Param.REPO_URL))), Uri.parse(cursor.getString(cursor.getColumnIndexOrThrow(ProviderContract.CurrentRooks.Param.ROOK_URL))), cursor.getString(cursor.getColumnIndexOrThrow(ProviderContract.CurrentRooks.Param.ROOK_REVISION)), cursor.getLong(cursor.getColumnIndexOrThrow(ProviderContract.CurrentRooks.Param.ROOK_MTIME))); } public static void set(Context context, List<VersionedRook> books) { ArrayList<ContentProviderOperation> ops = new ArrayList<>(); /* Delete all previous. */ ops.add(ContentProviderOperation .newDelete(ProviderContract.CurrentRooks.ContentUri.currentRooks()) .build()); /* Insert each one. */ for (VersionedRook book: books) { ContentValues values = new ContentValues(); CurrentRooksClient.toContentValues(values, book); ops.add(ContentProviderOperation .newInsert(ProviderContract.CurrentRooks.ContentUri.currentRooks()) .withValues(values) .build()); } try { context.getContentResolver().applyBatch(ProviderContract.AUTHORITY, ops); } catch (RemoteException | OperationApplicationException e) { e.printStackTrace(); } } public static Map<String, VersionedRook> getAll(Context context) { Map<String, VersionedRook> result = new HashMap<>(); Cursor cursor = context.getContentResolver().query( ProviderContract.CurrentRooks.ContentUri.currentRooks(), null, null, null, null); try { for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { VersionedRook vrook = CurrentRooksClient.fromCursor(cursor); result.put(vrook.getUri().toString(), vrook); } } finally { cursor.close(); } return result; } public static VersionedRook get(Context context, String url) { Cursor cursor = context.getContentResolver().query( ProviderContract.CurrentRooks.ContentUri.currentRooks(), null, ProviderContract.CurrentRooks.Param.ROOK_URL + "=?", new String[] { url }, null); try { if (cursor.moveToFirst()) { return CurrentRooksClient.fromCursor(cursor); } } finally { cursor.close(); } return null; } }