package com.lgq.rssreader.dal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.lgq.rssreader.core.Config;
import com.lgq.rssreader.core.ReaderApp;
import com.lgq.rssreader.entity.Blog;
import com.lgq.rssreader.entity.Channel;
import com.lgq.rssreader.entity.ImageRecord;
import com.lgq.rssreader.enums.RssTab;
import com.lgq.rssreader.utils.DateHelper;
import com.lgq.rssreader.utils.Helper;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class ImageRecordDalHelper {
private DBHelper.DatabaseHelper dbHelper;
private SQLiteDatabase db;
public final static byte[] _writeLock = new byte[0];
Context context;
public ImageRecordDalHelper() {
dbHelper = new DBHelper.DatabaseHelper(ReaderApp.getAppContext());
db = dbHelper.getWritableDatabase();
}
public void Close(){
dbHelper.close();
}
/**
* 判断imageRecordId是否存在
*
* @param blogId
* @return
*/
public boolean Exist(int imageRecordId) {
String where = "ImageRecordId=?";
String[] args = {String.valueOf(imageRecordId)};
Cursor cursor = db.query(Config.DB_IMAGE_TABLE, null, where, args, null,null, null);
boolean isExist = cursor != null && cursor.moveToNext();
cursor.close();
return isExist;
}
/**
* 判断OriginUrl是否存在
*
* @param blogId
* @return
*/
public boolean Exist(String OriginUrl) {
String where = "OriginUrl=?";
String[] args = {String.valueOf(OriginUrl)};
Cursor cursor = db.query(Config.DB_IMAGE_TABLE, null, where, args, null,null, null);
boolean isExist = cursor != null && cursor.moveToNext();
cursor.close();
return isExist;
}
/**
* 删除Images
*
* @param records
* @return
*/
public void DeleteRecords(List<ImageRecord> records) {
// String sql = "delete from ImageRecords where ImageRecordId in (";
// StringBuilder sb = new StringBuilder();
// for(ImageRecord r : records){
// sb.append("\"" + r.ImageRecordId + "\",");
// }
// if(records.size() > 0)
// sb.deleteCharAt(sb.length() - 1);
// sql = sql + sb.toString() + ")";
// db.execSQL(sql, null);
synchronized (_writeLock) {
db.beginTransaction();
try {
for (int i = records.size() - 1, len = 0; i >= len; i--) {
String recordId = String.valueOf(records.get(i).ImageRecordId);
db.delete(Config.DB_IMAGE_TABLE, "ImageRecordId=?", new String[]{recordId});
}
db.setTransactionSuccessful();
}
catch(Exception e){
e.printStackTrace();
}finally {
db.endTransaction();
}
}
}
/**
* 获取前30条记录
*
* @return
*/
public List<ImageRecord> GetTopImageList() {
String limit = "15";
String where = "";
return GetImageRecordListByWhere(limit, where, null);
}
/**
* 分页获取
*/
public List<ImageRecord> GetImageRecordListByPage(int pageIndex, int pageSize) {
String limit = String.valueOf((pageIndex - 1) * pageSize) + "," + String.valueOf(pageSize);
List<ImageRecord> list = GetImageRecordListByWhere(limit, null, null);
return list;
}
/**
* 分页获取
*/
public List<ImageRecord> GetImageRecordList(Date until) {
String where = "datetime(TimeStamp) <?";
SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.000");
String[] args = { dateFm.format(until) };//datetime(LogTime)=datetime('2011-08-18 16:38:32.000')
return GetImageRecordListByWhere(null, where, args );
}
/**
* 根据recordId获取单条记录
*/
public ImageRecord GetImageRecordEntity(int recordId) {
String limit = "1";
String where = "ImageRecordId=?";
String[] args = {String.valueOf(recordId)};
List<ImageRecord> list = GetImageRecordListByWhere(limit, where, args);
if (list.size() > 0) {
return list.get(0);
}
return null;
}
/**
* 根据ImageUrl获取单条记录
*/
public ImageRecord GetImageRecordEntity(String imageUrl) {
String limit = "1";
String where = "OriginUrl=?";
String[] args = {imageUrl};
List<ImageRecord> list = GetImageRecordListByWhere(limit, where, args);
if (list.size() > 0) {
return list.get(0);
}
return null;
}
/**
* 根据ImageUrl获取单条记录
*/
public List<ImageRecord> GetImageRecordByBlog(List<Blog> blogs) {
String where = "BlogId in (";
String[] args = new String[blogs.size()];
StringBuilder qes = new StringBuilder();
int i=0;
for(Blog b : blogs){
args[i] = b.BlogId;
qes.append("?,");
i++;
}
if(blogs.size() > 0 ){
qes.deleteCharAt(qes.length() - 1);
}
where = where + qes + ")";
return GetImageRecordListByWhere(null, where, args);
}
/**
* 根据storedName获取单条记录
*/
public ImageRecord GetImageRecordEntityByStoreName(String storedName) {
String limit = "1";
String where = "StoredName=?";
String[] args = {storedName};
List<ImageRecord> list = GetImageRecordListByWhere(limit, where, args);
if (list.size() > 0) {
return list.get(0);
}
return null;
}
/**
* 根据where条件获取记录
*
* @param top
* @param where
*/
public List<ImageRecord> GetImageRecordListByWhere(String limit, String where, String[] args) {
List<ImageRecord> listImageRecord = new ArrayList<ImageRecord>();
String orderBy = "TimeStamp DESC";
Cursor cursor = db.query(Config.DB_IMAGE_TABLE, null, where, args, null, null, orderBy, limit);
while (cursor != null && cursor.moveToNext()) {
ImageRecord entity = new ImageRecord();
entity.ImageRecordId = cursor.getInt(cursor.getColumnIndex("ImageRecordId"));
entity.Extension = cursor.getString(cursor.getColumnIndex("Extension"));
entity.OriginUrl = cursor.getString(cursor.getColumnIndex("OriginUrl"));
entity.BlogId = cursor.getString(cursor.getColumnIndex("BlogId"));
entity.StoredName = cursor.getString(cursor.getColumnIndex("StoredName"));
entity.Size = cursor.getDouble(cursor.getColumnIndex("Size"));
entity.TimeStamp = DateHelper.ParseDate(cursor.getString(cursor.getColumnIndex("TimeStamp")));
listImageRecord.add(entity);
}
cursor.close();
return listImageRecord;
}
/**
* 同步数据
*
* @param list
*/
public void SynchronyData2DB(List<ImageRecord> recordList) {
List<ContentValues> list = new ArrayList<ContentValues>();
for (int i = 0, len = recordList.size(); i < len; i++) {
ContentValues contentValues = new ContentValues();
//contentValues.put("ImageRecordId", recordList.get(i).ImageRecordId);
contentValues.put("OriginUrl", recordList.get(i).OriginUrl);
contentValues.put("Extension", recordList.get(i).Extension);
contentValues.put("StoredName", recordList.get(i).StoredName);
contentValues.put("BlogId", recordList.get(i).BlogId);
contentValues.put("Size", recordList.get(i).Size);
contentValues.put("TimeStamp", DateHelper.ParseDateToString(recordList.get(i).TimeStamp));
list.add(contentValues);
}
synchronized (_writeLock) {
db.beginTransaction();
try {
for (int i = 0, len = list.size(); i < len; i++) {
String OriginUrl=list.get(i).getAsString("OriginUrl");
boolean isExist = Exist(OriginUrl);
if (!isExist) {
db.insert(Config.DB_IMAGE_TABLE, null, list.get(i));
}
}
db.setTransactionSuccessful();
}
catch(Exception e){
e.printStackTrace();
}finally {
db.endTransaction();
}
}
}
/**
* 同步数据
*
* @param list
*/
public void SynchronyData2DB(ImageRecord record) {
ContentValues contentValues = new ContentValues();
//contentValues.put("ImageRecordId", recordList.get(i).ImageRecordId);
contentValues.put("OriginUrl", record.OriginUrl);
contentValues.put("Extension", record.Extension);
contentValues.put("StoredName", record.StoredName);
contentValues.put("BlogId", record.BlogId);
contentValues.put("Size", record.Size);
contentValues.put("TimeStamp", DateHelper.ParseDateToString(record.TimeStamp));
synchronized (_writeLock) {
db.beginTransaction();
try {
boolean isExist = Exist(record.OriginUrl);
if (!isExist) {
db.insert(Config.DB_IMAGE_TABLE, null, contentValues);
}
db.setTransactionSuccessful();
}
catch(Exception e){
e.printStackTrace();
}finally {
db.endTransaction();
}
}
}
}