package com.yaoyumeng.v2ex.database;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.yaoyumeng.v2ex.model.TopicModel;
import java.util.ArrayList;
/**
* 类说明: 话题已读/未读,收藏/未收藏数据表,数据库帮助类
* Created by yw on 2015/5/12.
*/
public class V2EXDataSource {
private SQLiteDatabase database;
final String TAG = "V2EXDataSource";
public V2EXDataSource(DatabaseHelper dbHelper) {
database = dbHelper.getWritableDatabase();
}
private String[] allColumns = {DatabaseHelper.TOPIC_COLUMN_TOPICID,
DatabaseHelper.TOPIC_COLUMN_READ,
DatabaseHelper.TOPIC_COLUMN_FAVOR};
private void insertTopic(TopicModel model, boolean read, boolean favor) {
ContentValues values = new ContentValues();
values.put(DatabaseHelper.TOPIC_COLUMN_TOPICID, model.id);
values.put(DatabaseHelper.TOPIC_COLUMN_FAVOR, favor ? 1 : 0);
values.put(DatabaseHelper.TOPIC_COLUMN_READ, read ? 1 : 0);
database.insert(DatabaseHelper.TOPIC_TABLE_NAME, null, values);
}
/**
* 设置为已读
*/
public boolean readTopic(TopicModel model) {
int topicId = model.id;
if (topicId == 0)
return false;
//数据项不存在,插入
if (!isTopicExisted(topicId)) {
insertTopic(model, true, false);
return true;
}
boolean read = isTopicRead(topicId);
if (read) return false;
ContentValues values = new ContentValues();
values.put(DatabaseHelper.TOPIC_COLUMN_READ, 1);
database.update(DatabaseHelper.TOPIC_TABLE_NAME, values,
DatabaseHelper.TOPIC_COLUMN_TOPICID + " = " + topicId,
null);
return true;
}
/**
* 设置收藏状态
*/
public boolean favoriteTopic(TopicModel model, boolean favored) {
int topicId = model.id;
if (topicId == 0)
return false;
if (!isTopicExisted(topicId)) {
insertTopic(model, false, true);
return true;
}
ContentValues values = new ContentValues();
values.put(DatabaseHelper.TOPIC_COLUMN_FAVOR, favored ? 1 : 0);
database.update(DatabaseHelper.TOPIC_TABLE_NAME, values,
DatabaseHelper.TOPIC_COLUMN_TOPICID + " = " + topicId,
null);
return true;
}
/**
* 话题是否已读
*/
public boolean isTopicRead(int topicId) {
return getTopicField(topicId, DatabaseHelper.TOPIC_COLUMN_READ) == 1;
}
/**
* 话题是否已收藏
*/
public boolean isTopicFavorite(int topicId) {
return getTopicField(topicId, DatabaseHelper.TOPIC_COLUMN_FAVOR) == 1;
}
/**
* 话题是否存在数据表中
*
* @param topicId
* @return
*/
private boolean isTopicExisted(int topicId) {
Cursor cursor = database.query(DatabaseHelper.TOPIC_TABLE_NAME, allColumns,
DatabaseHelper.TOPIC_COLUMN_TOPICID + " = " + topicId, null,
null, null, null);
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
cursor.close();
return true;
}
return false;
}
/**
* 获取状态
*
* @param topicId
* @param column
* @return
*/
private int getTopicField(int topicId, String column) {
int result = 0;
Cursor cursor = database.query(DatabaseHelper.TOPIC_TABLE_NAME, allColumns,
DatabaseHelper.TOPIC_COLUMN_TOPICID + " = " + topicId, null,
null, null, null);
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
result = cursor.getInt(cursor.getColumnIndex(column));
cursor.close();
}
return result;
}
private String[] allNodeColumns = {DatabaseHelper.NODE_COLUMN_NODENAME,
DatabaseHelper.NODE_COLUMN_ISFAVOR};
private void insertNode(String nodeName, boolean favor) {
ContentValues values = new ContentValues();
values.put(DatabaseHelper.NODE_COLUMN_NODENAME, nodeName);
values.put(DatabaseHelper.NODE_COLUMN_ISFAVOR, favor ? 1 : 0);
database.insert(DatabaseHelper.NODE_TABLE_NAME, null, values);
}
private boolean isNodeExisted(String nodeName) {
Cursor cursor = database.query(DatabaseHelper.NODE_TABLE_NAME, allNodeColumns,
DatabaseHelper.NODE_COLUMN_NODENAME + "='" + nodeName + "'", null,
null, null, null);
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
cursor.close();
return true;
}
return false;
}
/**
* 节点是否已收藏
*/
public boolean isNodeFavorite(String nodeName) {
Cursor cursor = database.query(DatabaseHelper.NODE_TABLE_NAME, allNodeColumns,
DatabaseHelper.NODE_COLUMN_NODENAME + " ='" + nodeName + "'", null,
null, null, null);
int result = 0;
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
result = cursor.getInt(cursor.getColumnIndex(DatabaseHelper.NODE_COLUMN_ISFAVOR));
cursor.close();
}
Log.i(TAG, nodeName + result);
return result == 1;
}
/**
* 将某个节点加入收藏或者取消收藏
*/
public boolean favoriteNode(String nodeName, boolean favor) {
if (!isNodeExisted(nodeName)) {
insertNode(nodeName, favor);
return true;
}
ContentValues values = new ContentValues();
values.put(DatabaseHelper.NODE_COLUMN_ISFAVOR, favor ? 1 : 0);
database.update(DatabaseHelper.NODE_TABLE_NAME, values,
DatabaseHelper.NODE_COLUMN_NODENAME + " ='" + nodeName + "'",
null);
return true;
}
ArrayList<String> getAllFavorNodes() {
ArrayList<String> nodes = new ArrayList<String>();
Cursor cursor = database.query(DatabaseHelper.NODE_TABLE_NAME, allNodeColumns,
DatabaseHelper.NODE_COLUMN_ISFAVOR + " = " + 1, null, null, null,
null);
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToFirst()) {
nodes.add(cursor.getString(cursor.getColumnIndex(DatabaseHelper.NODE_TABLE_NAME)));
}
cursor.close();
}
return nodes;
}
}