package by.istin.android.xcore.provider; import android.content.ContentProvider; import android.content.ContentProviderOperation; import android.content.ContentProviderResult; import android.content.ContentValues; import android.content.Context; import android.content.OperationApplicationException; import android.database.Cursor; import android.net.Uri; import java.util.ArrayList; import by.istin.android.xcore.ContextHolder; import by.istin.android.xcore.db.IDBConnection; import by.istin.android.xcore.db.impl.DBHelper; import by.istin.android.xcore.provider.impl.DBContentProviderFactory; public abstract class DBContentProvider extends ContentProvider { private IDBContentProviderSupport dbContentProviderSupport; @Override public boolean onCreate() { Context context = ContextHolder.getInstance().getContext(); if (context == null) { ContextHolder.getInstance().setContext(getContext()); } dbContentProviderSupport = getContentProviderSupport(getContext()); return true; } protected IDBContentProviderSupport getContentProviderSupport(Context context) { DBContentProviderFactory dbContentProviderFactory = DBContentProviderFactory.getInstance(); return dbContentProviderFactory.getDbContentProvider(context, DBContentProviderFactory.Type.SQLite, getEntities()); } @Override public final String getType(Uri uri) { return dbContentProviderSupport.getType(uri); } @Override public final int delete(Uri uri, String where, String[] whereArgs) { return dbContentProviderSupport.delete(uri, where, whereArgs); } @Override public final Uri insert(Uri uri, ContentValues initialValues) { return dbContentProviderSupport.insertOrUpdate(uri, initialValues); } @Override public final int bulkInsert(Uri uri, ContentValues[] values) { return dbContentProviderSupport.bulkInsertOrUpdate(uri, values); } @Override public final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return dbContentProviderSupport.query(uri, projection, selection, selectionArgs, sortOrder); } @Override public final int update(Uri uri, ContentValues initialValues, String where, String[] whereArgs) { throw new UnsupportedOperationException("unsupported operation, please use insert method"); } @Override public final ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations) throws OperationApplicationException { return dbContentProviderSupport.applyBatch(operations); } public abstract Class<?>[] getEntities(); public static IDBConnection getWritableConnection(Context context, Class<?>[] entities) { IDBContentProviderSupport dbContentProvider = DBContentProviderFactory.getDefaultDBContentProvider(context, entities); return dbContentProvider.getDbSupport().createConnector(context).getWritableConnection(); } public static IDBConnection getReadableConnection(Context context, Class<?>[] entities) { IDBContentProviderSupport dbContentProvider = DBContentProviderFactory.getDefaultDBContentProvider(context, entities); return dbContentProvider.getDbSupport().createConnector(context).getReadableConnection(); } public static DBHelper getDBHelper(Context context, Class<?>[] entities) { IDBContentProviderSupport dbContentProvider = DBContentProviderFactory.getDefaultDBContentProvider(context, entities); return dbContentProvider.getDbSupport().getOrCreateDBHelper(context); } }