package com.getbase.android.db.provider; import android.content.ContentProvider; import android.content.ContentProviderClient; import android.content.ContentProviderOperation; import android.content.ContentProviderResult; import android.content.ContentResolver; import android.content.OperationApplicationException; import android.os.RemoteException; import java.util.ArrayList; public abstract class Batcher { public static Batcher begin() { return new BatcherImpl(); } public abstract BackRefBuilder append(ConvertibleToOperation... convertibles); public abstract BackRefBuilder append(Iterable<ConvertibleToOperation> convertibles); public abstract Batcher decorateUrisWith(UriDecorator uriDecorator); public abstract ArrayList<ContentProviderOperation> operations(); public final ContentProviderResult[] applyBatch(ContentProvider provider) { return applyBatchOrThrow(null, new ContentProviderCrudHandler(provider)); } public final ContentProviderResult[] applyBatch(ContentProviderClient providerClient) throws RemoteException, OperationApplicationException { return applyBatch(null, new ContentProviderClientCrudHandler(providerClient)); } public final ContentProviderResult[] applyBatch(String authority, ContentResolver resolver) throws RemoteException, OperationApplicationException { return applyBatch(authority, new ContentResolverCrudHandler(resolver)); } public final ContentProviderResult[] applyBatch(String authority, CrudHandler crudHandler) throws RemoteException, OperationApplicationException { return crudHandler.applyBatch(authority, operations()); } public final ContentProviderResult[] applyBatchOrThrow(String authority, ContentProvider provider) { return applyBatchOrThrow(authority, new ContentProviderCrudHandler(provider)); } public final ContentProviderResult[] applyBatchOrThrow(String authority, ContentResolver resolver) { return applyBatchOrThrow(authority, new ContentResolverCrudHandler(resolver)); } public final ContentProviderResult[] applyBatchOrThrow(ContentProviderClient client) { return applyBatchOrThrow(null, new ContentProviderClientCrudHandler(client)); } public final ContentProviderResult[] applyBatchOrThrow(String authority, CrudHandler crudHandler) { try { return applyBatch(authority, crudHandler); } catch (RemoteException | OperationApplicationException e) { throw new RuntimeException("An Exception was returned from applyBatch", e); } } static class ValueBackRef { final Insert parent; final String column; ValueBackRef(Insert parent, String column) { this.parent = parent; this.column = column; } } static class SelectionBackRef { final Insert parent; final int selectionArgumentIndex; SelectionBackRef(Insert parent, int selectionArgumentIndex) { this.parent = parent; this.selectionArgumentIndex = selectionArgumentIndex; } } }