package me.nereo.baiduimageview.data;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import java.sql.SQLException;
import java.util.HashMap;
import me.nereo.baiduimageview.vender.BaiduApi;
/**
* Created by Administrator on 2014-07-09.
*/
public class ImageProvider extends ContentProvider {
private DatabaseHelper mDbOpenHelper;
private static final UriMatcher sUriMatcher;
private static HashMap<String, String> sImageProjection;
private static final int IMAGES = 1;
private static final int IMAGE_ID = 2;
static {
// New instance
sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sUriMatcher.addURI(BaiduData.AUTHORITY, "images", IMAGES);
sUriMatcher.addURI(BaiduData.AUTHORITY, "images/#", IMAGE_ID);
sImageProjection = new HashMap<String, String>();
sImageProjection.put(BaiduData.Images._ID, BaiduData.Images._ID);
sImageProjection.put(BaiduData.Images.COLUMN_CONTENT, BaiduData.Images.COLUMN_CONTENT);
sImageProjection.put(BaiduData.Images.COLUMN_TAG, BaiduData.Images.COLUMN_TAG);
sImageProjection.put(BaiduData.Images.COLUMN_CACHE_DATE, BaiduData.Images.COLUMN_CACHE_DATE);
}
@Override
public boolean onCreate() {
mDbOpenHelper = new DatabaseHelper(getContext());
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
//System.out.println("2:"+uri);
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(BaiduData.Images.TABLE_NAME);
switch (sUriMatcher.match(uri)){
case IMAGES:
qb.setProjectionMap(sImageProjection);
break;
case IMAGE_ID:
qb.setProjectionMap(sImageProjection);
qb.appendWhere(
BaiduData.Images._ID + " = " + uri.getPathSegments().get(BaiduData.Images.IMAGE_ID_PATH_POSITION)
);
break;
default:
throw new IllegalArgumentException("Unknown URI: "+uri);
}
SQLiteDatabase db = mDbOpenHelper.getReadableDatabase();
Cursor c = qb.query(
db,
projection,
selection,
selectionArgs,
null,
null,
sortOrder
);
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}
@Override
public String getType(Uri uri) {
switch (sUriMatcher.match(uri)){
case IMAGES:
return BaiduData.Images.CONTENT_TYPE;
case IMAGE_ID:
return BaiduData.Images.CONTENT_ITEM_TYPE;
default:
throw new IllegalArgumentException("Unknown URI: "+uri);
}
}
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
if (sUriMatcher.match(uri) != IMAGES) {
throw new IllegalArgumentException("Unknown URI: " + uri);
}
ContentValues values;
if (contentValues != null) {
values = new ContentValues(contentValues);
} else {
values = new ContentValues();
}
Long now = Long.valueOf(System.currentTimeMillis());
if (values.containsKey(BaiduData.Images.COLUMN_CACHE_DATE) == false) {
values.put(BaiduData.Images.COLUMN_CACHE_DATE, now);
}
SQLiteDatabase db = mDbOpenHelper.getWritableDatabase();
long rowId = db.insert(BaiduData.Images.TABLE_NAME, BaiduData.Images.COLUMN_CONTENT, values);
if (rowId > 0) {
Uri imageUri = ContentUris.withAppendedId(BaiduData.Images.CONTENT_ID_URI_BASE, rowId);
getContext().getContentResolver().notifyChange(imageUri, null);
return imageUri;
}
return null;
}
@Override
public int delete(Uri uri, String s, String[] strings) {
SQLiteDatabase db = mDbOpenHelper.getWritableDatabase();
String finalWhere;
int count;
switch (sUriMatcher.match(uri)){
case IMAGES:
count = db.delete(
BaiduData.Images.TABLE_NAME,
s,
strings);
break;
case IMAGE_ID:
finalWhere =
BaiduData.Images._ID + " = " + uri.getPathSegments().get(BaiduData.Images.IMAGE_ID_PATH_POSITION);
if(s != null){
finalWhere = finalWhere + " AND " + s;
}
count = db.delete(
BaiduData.Images.TABLE_NAME,
finalWhere,
strings
);
break;
default:
throw new IllegalArgumentException("Unknown URI: "+uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
@Override
public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
SQLiteDatabase db = mDbOpenHelper.getWritableDatabase();
int count;
String finalWhere;
switch (sUriMatcher.match(uri)){
case IMAGES:
count = db.update(
BaiduData.Images.TABLE_NAME,
contentValues,
s,
strings);
break;
case IMAGE_ID:
finalWhere =
BaiduData.Images._ID + " = " + uri.getPathSegments().get(BaiduData.Images.IMAGE_ID_PATH_POSITION);
if(s != null){
finalWhere = finalWhere + " AND " + s;
}
count = db.update(
BaiduData.Images.TABLE_NAME,
contentValues,
finalWhere,
strings
);
break;
default:
throw new IllegalArgumentException("Unknown URI: "+uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
static class DatabaseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context context) {
super(context, BaiduData.DATABASE_NAME, null, BaiduData.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
BaiduData.Images.TABLE.create(sqLiteDatabase);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {
BaiduData.Images.TABLE.delete(sqLiteDatabase);
onCreate(sqLiteDatabase);
}
}
}