package com.example.ipcplayer.provider;
import com.example.ipcplayer.utils.LogUtil;
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.SQLiteQueryBuilder;
import android.net.Uri;
public class MusicDBProvider extends ContentProvider{
private MusicDBHelper mDbHelper;
private Context mContext ;
private static String TAG = MusicDBProvider.class.getSimpleName();
private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH) ;
public static final int MUSICINFO = 1;
public static final int MUSICINFO_ITEM = 2;
public static final int DOWNLOADINFO = 21;
public static final int DOWNLOADINFO_ITEM = 22;
static {
LogUtil.d(TAG + " static code block init uri");
URI_MATCHER.addURI(MusicDB.AUTHORITY, "musicinfo", MUSICINFO);
URI_MATCHER.addURI(MusicDB.AUTHORITY, "musicinfo/#", MUSICINFO_ITEM);
URI_MATCHER.addURI(MusicDB.AUTHORITY, "downloadinfo",DOWNLOADINFO);
URI_MATCHER.addURI(MusicDB.AUTHORITY, "downloadinfo/#", DOWNLOADINFO_ITEM);
LogUtil.d(TAG + " static code block init uri URI_MATCHER: " + URI_MATCHER);
}
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
LogUtil.d(TAG + " onCreate ");
mContext = getContext();
mDbHelper = MusicDBHelper.getInstance(mContext);
return true;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
LogUtil.d(TAG + " getType ");
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
LogUtil.d(TAG + " insert ");
SQLiteDatabase db = mDbHelper.getWritableDatabase();
Uri newUri = null ;
long rowId ;
LogUtil.d("uri= " + uri);
int match = URI_MATCHER.match(uri);
LogUtil.d(" match= " + match);
switch(match){
case MUSICINFO:
{
LogUtil.d(TAG + " insert MUSICINFO ");
rowId = db.insert(MusicDBHelper.TABLE_MUSICINFO, "", values);
if(rowId > 0){
newUri = ContentUris.withAppendedId(uri, rowId);
getContext().getContentResolver().notifyChange(newUri, null);
break;
}
}
case DOWNLOADINFO:
{
LogUtil.d(TAG + " insert DOWNLOADINFO ");
rowId = db.insert(MusicDBHelper.TABLE_DOWNLOADINFO, "", values);
if(rowId > 0){
newUri = ContentUris.withAppendedId(uri,rowId);
getContext().getContentResolver().notifyChange(newUri,null);
break;
}
}
default :
{
throw new IllegalArgumentException("insert uri error ! " + uri);
}
}
return newUri;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
LogUtil.d(TAG + " query ");
LogUtil.d(TAG + " query uri = " + uri);
int table = URI_MATCHER.match(uri);
LogUtil.d(TAG + " query table = " + table);
SQLiteDatabase db = mDbHelper.getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
switch(table){
case MUSICINFO :
{
LogUtil.d(TAG + " query MUSICINFO ");
qb.setTables(MusicDBHelper.TABLE_MUSICINFO);
break ;
}
case MUSICINFO_ITEM:
{
LogUtil.d(TAG + " query MUSICINFO_ITEM ");
qb.setTables(MusicDBHelper.TABLE_MUSICINFO);
qb.appendWhere("_id = "+uri.getPathSegments().get(1));
break ;
}
case DOWNLOADINFO:
{
LogUtil.d(TAG + " DONWLOADINFO ");
qb.setTables(MusicDBHelper.TABLE_DOWNLOADINFO);
break ;
}
case DOWNLOADINFO_ITEM:
{
LogUtil.d(TAG + " DOWNLOADINFO_ITEM ");
qb.setTables(MusicDBHelper.TABLE_DOWNLOADINFO);
qb.appendWhere("_id = " + uri.getPathSegments().get(1));
break ;
}
default :
{
throw new IllegalArgumentException("query Uri error ! " + uri);
}
}
Cursor cursor= null;
try{
cursor = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder);
}catch(Exception e){
e.printStackTrace();
cursor = null;
}
if(cursor != null)
cursor.setNotificationUri(mContext.getContentResolver(), uri);
return cursor;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
LogUtil.d(TAG + " update ");
int count = 0;
SQLiteDatabase db = mDbHelper.getWritableDatabase();
int match = URI_MATCHER.match(uri);
LogUtil.d("match= " + match);
switch(match){
case MUSICINFO:
{
LogUtil.d(TAG + " update MUSICINFO ");
if(values.size() > 0){
try{
count = db.update(MusicDBHelper.TABLE_MUSICINFO, values, selection, selectionArgs);
}catch(Exception e){
e.printStackTrace();
count = 0;
}
}else {
count = 0;
}
break ;
}
case MUSICINFO_ITEM:
{
LogUtil.d(TAG + " update MUSICINFO_ITEM ");
String segmen = uri.getPathSegments().get(1);
LogUtil.d("segmen= " + segmen);
long rowId = Long.parseLong(segmen);
LogUtil.d("rowId= " + rowId);
String where = MusicDB.MusicInfoColumns._ID + "=" + rowId ;
LogUtil.d("where= " + where);
if(values.size() > 0){
count = db.update(MusicDBHelper.TABLE_MUSICINFO, values, where, null);
}else {
count = 0;
}
LogUtil.d("count= " + count);
getContext().getContentResolver().notifyChange(uri, null);
break ;
}
case DOWNLOADINFO :
{
LogUtil.d(TAG + " update DOWNLOADINFO ");
if(values.size() > 0){
try{
count = db.update(MusicDBHelper.TABLE_DOWNLOADINFO, values, selection, selectionArgs);
}catch(Exception e){
count = 0;
e.printStackTrace();
}
}else{
count = 0;
}
break ;
}
case DOWNLOADINFO_ITEM:
{
LogUtil.d(TAG + " DONWLOADINFO_ITEM ");
String segment = uri.getPathSegments().get(1);
long rowId = Long.parseLong(segment);
String where = MusicDB.DownloadInfoColumns._ID + "=" + rowId;
if(values.size() > 0){
count = db.update(MusicDBHelper.TABLE_DOWNLOADINFO, values, where, null);
}else{
count = 0;
}
break ;
}
default :
throw new IllegalArgumentException("update uri error ! " + uri);
}
return count;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
LogUtil.d(TAG + " delete ");
int count = 0;
SQLiteDatabase db = mDbHelper.getWritableDatabase();
int match = URI_MATCHER.match(uri);
try{
switch(match){
case MUSICINFO:
{
LogUtil.d(TAG + " delete MUSICINFO ");
count = db.delete(MusicDBHelper.TABLE_MUSICINFO, selection, selectionArgs);
LogUtil.d("count= " + count);
getContext().getContentResolver().notifyChange(uri, null);
break ;
}
case MUSICINFO_ITEM:
{
LogUtil.d(TAG + " delete MUSICINFO_ITEM ");
String segment = uri.getPathSegments().get(1);
long rowId = Long.parseLong(segment);
String where = MusicDB.MusicInfoColumns._ID + "=" + rowId;
count = db.delete(MusicDBHelper.TABLE_MUSICINFO, where, null);
LogUtil.d("count= " + count);
getContext().getContentResolver().notifyChange(uri, null);
break ;
}
case DOWNLOADINFO:
{
LogUtil.d(TAG + " delete DOWNLOADINFO ");
count = db.delete(MusicDBHelper.TABLE_DOWNLOADINFO, selection, selectionArgs);
getContext().getContentResolver().notifyChange(uri, null);
break ;
}
case DOWNLOADINFO_ITEM:
{
LogUtil.d(TAG + " delete DOWNLOADINFO_ITEM ");
String segment = uri.getPathSegments().get(1);
long rowId = Long.parseLong(segment);
String where = MusicDB.DownloadInfoColumns._ID + "=" + rowId;
count = db.delete(MusicDBHelper.TABLE_DOWNLOADINFO, where, null);
getContext().getContentResolver().notifyChange(uri, null);
break ;
}
default :
throw new IllegalArgumentException("delete uri error ! " + uri);
}
}catch(Exception e){
count = 0;
e.printStackTrace();
}
return count;
}
}