package eoc.studio.voicecard.facebook.friends;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class FriendsAdapterData {
private static final String DATABASE_NAME = "friends.db";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_TABLE = "friends";
private static final String DATABASE_CREATE = "create table friends(" + "_id INTEGER PRIMARY KEY,"
+ "friend_id TEXT NOT NULL," + "friend_name TEXT," + "friend_birthday TEXT," + "friend_img_link TEXT,"
+ "friend_img BLOB," + "select_state INTEGER" + ");";
public static final String KEY_ROWID = "_id";
public static final String KEY_FRIEND_ID = "friend_id";
public static final String KEY_FRIEND_NAME = "friend_name";
public static final String KEY_FRIEND_BIRTHDAY = "friend_birthday";
public static final String KEY_FRIEND_IMG_LINK = "friend_img_link";
public static final String KEY_FRIEND_IMG = "friend_img";
public static final String KEY_SELECT_STATE = "select_state";
public static final int UNSELECT = 0;
public static final int SELECT = 1;
private Context context = null;
private DatabaseHelper dbHelper;
private SQLiteDatabase db;
private static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
/** Constructor */
public FriendsAdapterData(Context context) {
this.context = context;
}
public FriendsAdapterData open() throws SQLException {
dbHelper = new DatabaseHelper(context);
db = dbHelper.getWritableDatabase();
return this;
}
public void close() {
if (dbHelper != null)
dbHelper.close();
}
/** Get all items from database*/
public Cursor getAll() {
return db.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_FRIEND_ID, KEY_FRIEND_NAME, KEY_FRIEND_BIRTHDAY,
KEY_FRIEND_IMG_LINK, KEY_FRIEND_IMG, KEY_SELECT_STATE }, null, null, null, null,
KEY_FRIEND_NAME);
}
/** Insert item to database */
public long create(String friendId, String name, String birthday, String imgLink, byte[] img, int selectState) {
ContentValues args = new ContentValues();
args.put(KEY_FRIEND_ID, friendId);
args.put(KEY_FRIEND_NAME, name);
args.put(KEY_FRIEND_BIRTHDAY, birthday);
args.put(KEY_FRIEND_IMG_LINK, imgLink);
args.put(KEY_FRIEND_IMG, img);
args.put(KEY_SELECT_STATE, selectState);
return db.insert(DATABASE_TABLE, null, args);
}
/** Delete one item from database */
public boolean delete(String friendId) {
if (db != null && db.isOpen())
return db.delete(DATABASE_TABLE, KEY_FRIEND_ID + "=" + friendId, null) > 0;
else
return false;
}
/** Delete all item from database */
public boolean delete() {
if (db != null && db.isOpen())
return db.delete(DATABASE_TABLE, null, null) > 0;
else
return false;
}
/** Query single entry */
public Cursor get(String friendId) throws SQLException {
if (db.isOpen()) {
Cursor cursor = db.query(true, DATABASE_TABLE, new String[] { KEY_ROWID, KEY_FRIEND_ID, KEY_FRIEND_NAME,
KEY_FRIEND_BIRTHDAY, KEY_FRIEND_IMG_LINK, KEY_FRIEND_IMG, KEY_SELECT_STATE}, KEY_FRIEND_ID + "="
+ friendId, null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
} else {
return null;
}
}
public Cursor seachResult(String selectionName) throws SQLException {
if (db.isOpen()) {
String where = KEY_FRIEND_NAME + " like ?";
String[] selection = new String[] { selectionName + "%" };
Cursor cursor = db.query(true, DATABASE_TABLE, new String[] { KEY_FRIEND_ID, KEY_FRIEND_NAME,
KEY_FRIEND_BIRTHDAY, KEY_FRIEND_IMG_LINK, KEY_FRIEND_IMG, KEY_SELECT_STATE},
where, selection, null, null, null, null);
return cursor;
} else {
return null;
}
}
public int getSelectedState(String friendId) throws SQLException {
int state = 0;
if (db.isOpen()) {
Cursor cursor = db.query(true, DATABASE_TABLE, new String[] { KEY_SELECT_STATE }, KEY_FRIEND_ID + "="
+ friendId, null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
state = cursor.getInt(cursor.getColumnIndexOrThrow(KEY_SELECT_STATE));
cursor.close();
}
}
return state;
}
public Cursor getSelectedFriend() throws SQLException {
if (db.isOpen()) {
Cursor cursor = db.query(true, DATABASE_TABLE, new String[] { KEY_FRIEND_ID, KEY_FRIEND_NAME,
KEY_FRIEND_BIRTHDAY, KEY_FRIEND_IMG_LINK }, KEY_SELECT_STATE + "=" + SELECT, null, null, null, null, null);
return cursor;
} else {
return null;
}
}
/** Update the database */
public boolean update(String friendId, String name, String birthday, String imgLink, byte[] img,
int selectState) {
if (db.isOpen()) {
ContentValues args = new ContentValues();
args.put(KEY_FRIEND_NAME, name);
args.put(KEY_FRIEND_BIRTHDAY, birthday);
args.put(KEY_FRIEND_IMG_LINK, imgLink);
args.put(KEY_FRIEND_IMG, img);
args.put(KEY_SELECT_STATE, selectState);
return db.update(DATABASE_TABLE, args, KEY_FRIEND_ID + "=" + friendId, null) > 0;
} else {
return false;
}
}
public boolean updateSelectedState(String friendId, int selectState) {
if (db.isOpen()) {
ContentValues args = new ContentValues();
args.put(KEY_SELECT_STATE, selectState);
return db.update(DATABASE_TABLE, args, KEY_FRIEND_ID + "=" + friendId, null) > 0;
} else {
return false;
}
}
public boolean updateFriendImg(String friendId, byte[] friendImg) {
if (db.isOpen()) {
ContentValues args = new ContentValues();
args.put(KEY_FRIEND_IMG, friendImg);
return db.update(DATABASE_TABLE, args, KEY_FRIEND_ID + "=" + friendId, null) > 0;
} else {
return false;
}
}
/** Query single entry with name and birthday*/
//For test
public Cursor getNameandBirthday(String name, String birthday) throws SQLException {
if (db.isOpen()) {
Cursor cursor = db.rawQuery("SELECT * FROM friends WHERE " + KEY_FRIEND_NAME + " = " + "\"" + name + "\""
+ " AND " + KEY_FRIEND_BIRTHDAY + " = " + "\"" + birthday + "\"", null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
} else {
return null;
}
}
}