package com.cnblogs.android.dal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.cnblogs.android.core.Config;
import com.cnblogs.android.entity.RssItem;
import com.cnblogs.android.utility.AppUtil;
public class RssItemDalHelper {
private DBOpenHelp.DatabaseHelper dbHelper;
private SQLiteDatabase db;
public final static byte[] _writeLock = new byte[0];
public RssItemDalHelper(Context context){
dbHelper=new DBOpenHelp.DatabaseHelper(context);
db=dbHelper.getWritableDatabase();
}
/**
* �ж��Ƿ��Ѿ�����
* @param blogId
* @return
*/
private boolean Exist(String link){
String where="Link=?";
String[] args={link};
Cursor cursor= db.query(Config.DB_RSSITEM_TABLE, null, where, args, null, null, null);
boolean isExist= cursor!=null && cursor.moveToNext();
cursor.close();
return isExist;
}
/**
* �õ�ͷ��
* @return
*/
public List<RssItem> GetTopNewsList(){
String limit="10";
return GetRssItemsByWhere(limit,null,null);
}
/*
* ��ҳ
*/
public List<RssItem> GetRssItemByPage(int pageIndex,int pageSize){
String limit= String.valueOf((pageIndex-1)*pageSize) + "," + String.valueOf(pageSize);
List<RssItem> list=GetRssItemsByWhere(limit,null,null);
return list;
}
/*
* �õ�����
*/
public RssItem GetRssItemEntity(int id){
String limit="1";
String where="Id=?";
String[] args={String.valueOf(id)};
List<RssItem> list=GetRssItemsByWhere(limit,where,args);
if(list.size()>0){
return list.get(0);
}
return null;
}
/**
* ���������õ�
* @param top
* @param where
*/
public List<RssItem> GetRssItemsByWhere(String limit,String where,String[] args){
List<RssItem> listRss=new ArrayList<RssItem>();
String orderBy="Id desc";
Cursor cursor=db.query(Config.DB_RSSITEM_TABLE, null, where, args, null, null, orderBy,limit);
while(cursor!=null && cursor.moveToNext()){
RssItem entity=new RssItem();
String addTimeStr=cursor.getString(cursor.getColumnIndex("AddDate"));
Date addTime=AppUtil.ParseDate(addTimeStr);
entity.SetAddDate(addTime);
entity.SetDescription(cursor.getString(cursor.getColumnIndex("Description")));
entity.SetTitle(cursor.getString(cursor.getColumnIndex("Title")));
entity.SetId(cursor.getInt(cursor.getColumnIndex("Id")));
String link="";
if(cursor.getString(cursor.getColumnIndex("Link"))!=null){
link=cursor.getString(cursor.getColumnIndex("NewsUrl"));
}
entity.SetLink(link);
entity.SetIsReaded(Boolean.getBoolean(cursor.getString(cursor.getColumnIndex("IsReaded"))));
entity.SetAuthor(cursor.getString(cursor.getColumnIndex("Author")));
boolean isDigg=cursor.getString(cursor.getColumnIndex("IsDigg")).equals("1");
entity.SetIsReaded(isDigg);
listRss.add(entity);
}
cursor.close();
return listRss;
}
/**
* �Ƿ��Ѷ�
* @param blogId
* @return
*/
public boolean GetIsReaded(int id){
RssItem entity=GetRssItemEntity(id);
if(entity!=null){
return entity.GetIsReaded();
}
return false;
}
/**
* ��־Ϊ�Ѷ�
* @param blogId
*/
public void MarkAsReaded(int id){
String sql="update RssItem set IsReaded=1 where Id=?";
String[] args={String.valueOf(id)};
db.execSQL(sql,args);
}
/**
* ����
* @param list
*/
public void SynchronyData2DB(List<RssItem> rssItems){
List<ContentValues> list = new ArrayList<ContentValues>();
for(int i=0,len=rssItems.size();i<len;i++){
ContentValues contentValues = new ContentValues();
contentValues.put("Id",rssItems.get(i).GetId());
contentValues.put("Title",rssItems.get(i).GetTitle());
contentValues.put("Description",rssItems.get(i).GetDescription());
String link="";
if(rssItems.get(i).GetLink()!=null){
link=rssItems.get(i).GetLink();
}
contentValues.put("Link",link);
contentValues.put("AddDate",AppUtil.ParseDateToString(rssItems.get(i).GetAddDate()));
contentValues.put("Category",rssItems.get(i).GetCategory());
contentValues.put("Author",rssItems.get(i).GetAuthor());
contentValues.put("IsReaded",false);
contentValues.put("IsDigg",rssItems.get(i).GetIsDigg());
list.add(contentValues);
}
synchronized(_writeLock){
db.beginTransaction();
try{
//�������
//String where="IsFull=?";
//String[] args={"0"};
//db.delete(DB_NEWS_TABLE, where, args);
for(int i=0, len=list.size(); i<len; i++){
boolean isExist=Exist(list.get(i).getAsString("Link"));
if(!isExist){
db.insert(Config.DB_RSSITEM_TABLE, null, list.get(i));
}
}
db.setTransactionSuccessful();
}finally{
db.endTransaction();
}
}
}}