package com.cnblogs.android.dal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.cnblogs.android.core.Config;
import com.cnblogs.android.entity.FavList;
import com.cnblogs.android.enums.EnumResultType;
import com.cnblogs.android.utility.AppUtil;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
public class FavDBHelp {
private DBOpenHelp.DatabaseHelper dbHelper;
private SQLiteDatabase db;
public final static byte[] _writeLock = new byte[0];
public FavDBHelp(Context context){
dbHelper=new DBOpenHelp.DatabaseHelper(context);
db=dbHelper.getWritableDatabase();
}
public void Close(){
dbHelper.close();
}
/**
* �ж��Ƿ��Ѿ�����
* @param commentId
* @return
*/
private boolean Exist(int contentId,FavList.EnumContentType contentType){
String where="ContentId=? and ContentType=?";
String[] args={String.valueOf(contentId),String.valueOf(contentType.ordinal())};
Cursor cursor= db.query(Config.DB_FAV_TABLE, null, where, args, null, null, null);
boolean isExist= cursor!=null && cursor.moveToNext();
cursor.close();
return isExist;
}
/*
* ��ҳ
*/
public List<FavList> GetFavListByPage(int pageIndex,int pageSize,FavList.EnumContentType contentType){
String where="ContentType=?";
String[] args={String.valueOf(contentType.ordinal())};
String limit= String.valueOf((pageIndex-1)*pageSize) + "," + String.valueOf(pageSize);
List<FavList> list=GetFavListByWhere(limit,where,args);
return list;
}
/*
* �õ�����
*/
public FavList GetFavEntity(int favId){
String limit="1";
String where="FavId=?";
String[] args={String.valueOf(favId)};
List<FavList> list=GetFavListByWhere(limit,where,args);
if(list.size()>0){
return list.get(0);
}
return null;
}
/*
* �õ�����
*/
public FavList GetFavEntity(int contentId,FavList.EnumContentType contentType){
String limit="1";
String where="ContentId=? and ContentType=?";
String[] args={String.valueOf(contentId),String.valueOf(contentType.ordinal())};
List<FavList> list=GetFavListByWhere(limit,where,args);
if(list.size()>0){
return list.get(0);
}
return null;
}
/**
* �õ�
* @param top
* @param where
*/
public List<FavList> GetFavListByWhere(String limit,String where,String[] args){
List<FavList> listFav=new ArrayList<FavList>();
String orderBy="FavID desc";
Cursor cursor=db.query(Config.DB_FAV_TABLE, null, where, args, null, null, orderBy,limit);
while(cursor!=null && cursor.moveToNext()){
FavList entity=new FavList();
String addTimeStr=cursor.getString(cursor.getColumnIndex("AddTime"));
Date addTime=AppUtil.ParseDate(addTimeStr);
entity.SetAddTime(addTime);
entity.SetFavId(cursor.getInt(cursor.getColumnIndex("FavId")));
entity.SetContentType(FavList.EnumContentType.values()[cursor.getInt(cursor.getColumnIndex("ContentType"))]);
entity.SetContentId(cursor.getInt(cursor.getColumnIndex("ContentId")));
listFav.add(entity);
}
cursor.close();
return listFav;
}
/**
* ����
* @param list
*/
public EnumResultType.EnumActionResultType SynchronyData2DB(List<FavList> favList){
List<ContentValues> list = new ArrayList<ContentValues>();
for(int i=0,len=favList.size();i<len;i++){
ContentValues contentValues = new ContentValues();
contentValues.put("ContentId",favList.get(i).GetContentId());
contentValues.put("ContentType",favList.get(i).GetContentType().ordinal());
contentValues.put("AddTime",AppUtil.ParseDateToString(favList.get(i).GetAddTime()));
list.add(contentValues);
}
synchronized(_writeLock){
db.beginTransaction();
try{
for(int i=0, len=list.size(); i<len; i++){
boolean isExist=Exist(favList.get(i).GetContentId(),favList.get(i).GetContentType());
if(isExist){
return EnumResultType.EnumActionResultType.Exist;
}
db.insert(Config.DB_FAV_TABLE, null, list.get(i));
}
db.setTransactionSuccessful();
return EnumResultType.EnumActionResultType.Succ;
}catch(Exception ex){
Log.e("fav_insert", ex.getMessage());
return EnumResultType.EnumActionResultType.Fail;
}finally{
db.endTransaction();
}
}
}
/**
* ɾ��
* @param favId
*/
public boolean Delete(int favId) {
String where = "FavId=?";
String[] args = {String.valueOf(favId)};
try{
db.delete(Config.DB_FAV_TABLE, where, args);
return true;
}catch(Exception ex){
Log.e("fav_delete", ex.getMessage());
return false;
}
}
/**
* ɾ��
* @param favId
*/
public boolean Delete(int contentId,FavList.EnumContentType contentType) {
String where = "ContentId=? and ContentType=?";
String[] args = {String.valueOf(contentId),String.valueOf(contentType.ordinal())};
try{
db.delete(Config.DB_FAV_TABLE, where, args);
return true;
}catch(Exception ex){
Log.e("fav_delete", ex.getMessage());
return false;
}
}
}