package cn.trinea.android.common.dao.impl; import java.util.Map.Entry; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import cn.trinea.android.common.constant.DbConstants; import cn.trinea.android.common.dao.ImageSDCardCacheDao; import cn.trinea.android.common.entity.CacheObject; import cn.trinea.android.common.service.impl.ImageSDCardCache; import cn.trinea.android.common.util.SqliteUtils; import cn.trinea.android.common.util.StringUtils; /** * ImageSDCardCacheDao * * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2013-10-21 */ public class ImageSDCardCacheDaoImpl implements ImageSDCardCacheDao { private SqliteUtils sqliteUtils; public ImageSDCardCacheDaoImpl(SqliteUtils sqliteUtils) { this.sqliteUtils = sqliteUtils; } @Override public boolean putIntoImageSDCardCache(ImageSDCardCache imageSDCardCache, String tag) { if (imageSDCardCache == null || StringUtils.isEmpty(tag)) { return false; } StringBuilder selection = new StringBuilder(); selection.append(DbConstants.IMAGE_SDCARD_CACHE_TABLE_TAG).append("=?"); String[] selectionArgs = {tag}; Cursor cursor = sqliteUtils.getDb().query(DbConstants.IMAGE_SDCARD_CACHE_TABLE_TABLE_NAME, null, selection.toString(), selectionArgs, null, null, null); if (cursor == null) { return true; } if (cursor != null && cursor.getCount() > 0) { for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { CacheObject<String> value = new CacheObject<String>(); String imageUrl = cursor.getString(DbConstants.IMAGE_SDCARD_CACHE_TABLE_URL_INDEX); value.setData(cursor.getString(DbConstants.IMAGE_SDCARD_CACHE_TABLE_PATH_INDEX)); value.setUsedCount(cursor.getInt(DbConstants.IMAGE_SDCARD_CACHE_TABLE_USED_COUNT_INDEX)); value.setPriority(cursor.getInt(DbConstants.IMAGE_SDCARD_CACHE_TABLE_PRIORITY_INDEX)); value.setExpired(cursor.getInt(DbConstants.IMAGE_SDCARD_CACHE_TABLE_IS_EXPIRED_INDEX) == 1); value.setForever(cursor.getInt(DbConstants.IMAGE_SDCARD_CACHE_TABLE_IS_FOREVER_INDEX) == 1); imageSDCardCache.put(imageUrl, value); } } if (cursor != null && !cursor.isClosed()) { cursor.close(); } return true; } @Override public boolean deleteAndInsertImageSDCardCache(ImageSDCardCache imageSDCardCache, String tag) { if (imageSDCardCache == null || StringUtils.isEmpty(tag)) { return false; } SQLiteDatabase db = sqliteUtils.getDb(); db.beginTransaction(); try { StringBuilder whereClause = new StringBuilder(); whereClause.append(DbConstants.IMAGE_SDCARD_CACHE_TABLE_TAG).append("=?"); String[] whereArgs = {tag}; db.delete(DbConstants.IMAGE_SDCARD_CACHE_TABLE_TABLE_NAME, whereClause.toString(), whereArgs); String key; CacheObject<String> value; for (Entry<String, CacheObject<String>> entry : imageSDCardCache.entrySet()) { if (entry != null && (key = entry.getKey()) != null && (value = entry.getValue()) != null) { db.insert(DbConstants.IMAGE_SDCARD_CACHE_TABLE_TABLE_NAME, null, cacheObjectToCV(tag, key, value)); } } db.setTransactionSuccessful(); return true; } catch (Exception e) { return false; } finally { db.endTransaction(); } } /** * @param tag * @param url * @param value * @return */ private static ContentValues cacheObjectToCV(String tag, String url, CacheObject<String> value) { ContentValues values = new ContentValues(); values.put(DbConstants.IMAGE_SDCARD_CACHE_TABLE_TAG, tag); values.put(DbConstants.IMAGE_SDCARD_CACHE_TABLE_URL, url); values.put(DbConstants.IMAGE_SDCARD_CACHE_TABLE_PATH, value.getData()); values.put(DbConstants.IMAGE_SDCARD_CACHE_TABLE_ENTER_TIME, value.getEnterTime()); values.put(DbConstants.IMAGE_SDCARD_CACHE_TABLE_LAST_USED_TIME, value.getLastUsedTime()); values.put(DbConstants.IMAGE_SDCARD_CACHE_TABLE_USED_COUNT, value.getUsedCount()); values.put(DbConstants.IMAGE_SDCARD_CACHE_TABLE_PRIORITY, value.getPriority()); values.put(DbConstants.IMAGE_SDCARD_CACHE_TABLE_IS_EXPIRED, value.isExpired() ? 1 : 0); values.put(DbConstants.IMAGE_SDCARD_CACHE_TABLE_IS_FOREVER, value.isForever() ? 1 : 0); return values; } }