package com.openims.model.pushService;
import java.util.ArrayList;
import java.util.List;
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;
import android.util.Log;
import com.openims.utility.LogUtil;
import com.openims.utility.PushServiceUtil;
/**
*
* @author Andrew Chan
* @version 1.0
* @time 2011-4-1 9:50:40
* @description this is the class for manage push content database
*/
public class PushContentDB {
private static final String LOGTAG = LogUtil.makeLogTag(PushContentDB.class);
private static final String TAG = LogUtil.makeTag(PushContentDB.class);
private static final String DATABASE_NAME = "pushContent.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "pushContent";
public static final String INDEX = "_id";
public static final String SIZE = "size";
public static final String TITLE = "title";
public static final String CONTENT = "content";
public static final String LOCAL_PATH = "localPath";
public static final String TIME = "time";
public static final String TYPE = "type";
public static final String STATUS = "status";
public static final String FLAG = "flag";
private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+"("+
INDEX+" INTEGER PRIMARY KEY," +
TITLE+" text," +
SIZE+" text," +
CONTENT+" text,"+
LOCAL_PATH+" text,"+
TIME+" text not null,"+
TYPE+" text,"+
STATUS+" text,"+
FLAG+" text "+ ");";
private static DatabaseHelper databaseHelper;
public PushContentDB(Context context){
databaseHelper = new DatabaseHelper(context);
}
public void close(){
if(databaseHelper != null){
databaseHelper.close();
}
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOGTAG,TAG+"onCreate table:" + CREATE_TABLE);
try {
db.execSQL(CREATE_TABLE);
initDatabase(db);
} catch (SQLException e) {
e.printStackTrace();
Log.e(LOGTAG,TAG+"create table fail:" + CREATE_TABLE);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
private boolean insertItem(SQLiteDatabase db,PushContent pushContent){
String sql = "insert into " + TABLE_NAME + " ("+
INDEX +","+SIZE +
","+TITLE +
","+CONTENT +
","+LOCAL_PATH+","+TIME+
","+TYPE +
","+STATUS +
","+FLAG+
") values(" +
null+",'"+
pushContent.getSize()+"','"+
pushContent.getTitle()+"','"+
pushContent.getContent()+ "','"+
pushContent.getLocalPath()+ "','"+
pushContent.getTime()+ "','"+
pushContent.getType()+ "','"+
pushContent.getStatus()+ "','"+
pushContent.getFlag()+ "'"+
");";
Log.d(LOGTAG,TAG+sql);
try {
db.execSQL(sql);
} catch (SQLException e) {
e.printStackTrace();
Log.d(LOGTAG,TAG+"execSQL error:"+e.getMessage());
return false;
}
return true;
}
private void initDatabase(SQLiteDatabase db){
PushContent push = new PushContent();
push.setType(PushServiceUtil.DEFAULTID_TEXT);
push.setContent("��ӭʹ��Pushƽ̨");
push.setTitle("��ӭ");
insertItem(db,push);
push = new PushContent();
push.setType(PushServiceUtil.DEFAULTID_PICTURE);
push.setTitle("��ӭʹ��Pushƽ̨");
push.setContent("http://www.w3schools.com/images/w3schoolslogo.gif");
insertItem(db,push);
}
}
public boolean reCreateTable(){
Log.d(LOGTAG,TAG+"CreateTable:" + TABLE_NAME);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
try {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
db.execSQL(CREATE_TABLE);
Log.d(LOGTAG,TAG+"Recreat table success");
} catch (SQLException e) {
Log.e(LOGTAG,TAG+"Recreat table failure");
return false;
}
db.close();
return true;
}
// and/insert
public boolean insertItem(PushContent pushContent){
SQLiteDatabase db = databaseHelper.getWritableDatabase();
String sql = "insert into " + TABLE_NAME + " ("+
INDEX +","+SIZE +
","+TITLE +
","+CONTENT +
","+LOCAL_PATH+","+TIME+
","+TYPE +
","+STATUS +
","+FLAG+
") values(" +
null+",'"+
pushContent.getSize()+"','"+
pushContent.getTitle()+"','"+
pushContent.getContent()+ "','"+
pushContent.getLocalPath()+ "','"+
pushContent.getTime()+ "','"+
pushContent.getType()+ "','"+
pushContent.getStatus()+ "','"+
pushContent.getFlag()+ "'"+
");";
Log.d(LOGTAG,TAG+sql);
try {
db.execSQL(sql);
} catch (SQLException e) {
e.printStackTrace();
Log.d(LOGTAG,TAG+"execSQL error:"+e.getMessage());
return false;
}
return true;
}
/**
* delete one item
* @param index for the primary key
* @return true for success
*/
public boolean deleteItem(String index){
SQLiteDatabase db = databaseHelper.getWritableDatabase();
String where = INDEX + "='"+index+"'";
int n = db.delete(TABLE_NAME, where,null);
if(n == 1){
Log.d(LOGTAG,TAG+"Del push content succuss where index:"+index);
return true;
}
Log.e(LOGTAG,TAG+"delete Push Inf fail where index:'"+index+"'");
return false;
}
/**
* query some items form the database
*
* @param num the number of the latest items to return.
* If num=-1 return all items
*/
public List<PushContent> queryItems(int pageID,int pageSize){
List<PushContent> list = new ArrayList<PushContent>();
SQLiteDatabase db = databaseHelper.getReadableDatabase();
// String sql = "select * from " + TABLE_NAME +
// " Limit "+String.valueOf((pageID-1)*pageSize)+" ,"+String.valueOf((pageID)*pageSize);
// Cursor cursor = db.rawQuery(sql, null);
// TODO some system bug here
Cursor cursor = db.query(TABLE_NAME, null, null,
null, null, null, null,null);
cursor.moveToFirst();
int nCount = 1;
while(cursor.isLast()==false){
int nCol = cursor.getColumnCount();
PushContent pushContent = new PushContent();
for(int i=0;i<nCol;i++){
String columnName = cursor.getColumnName(i);
if(INDEX.equals(columnName)){
pushContent.setIndex(cursor.getString(i));
}else if(SIZE.equals(columnName)){
pushContent.setSize(cursor.getString(i));
}else if(CONTENT.equals(columnName)){
pushContent.setContent(cursor.getString(i));
}else if(LOCAL_PATH.equals(columnName)){
pushContent.setLocalPath(cursor.getString(i));
}else if(TYPE.equals(columnName)){
pushContent.setType(cursor.getString(i));
}else if(TIME.equals(columnName)){
pushContent.setTime(cursor.getString(i));
}else if(FLAG.equals(columnName)){
pushContent.setFlag(cursor.getString(i));
}else if(STATUS.equals(columnName)){
pushContent.setStatus(cursor.getString(i));
}
}
list.add(pushContent);
if(pageSize!=-1 && nCount>=pageSize)
break;
nCount++;
cursor.moveToNext();
}
return list;
}
public Cursor queryItems(){
SQLiteDatabase db = databaseHelper.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, null, null,
null, null, null, INDEX+" DESC",null);
return cursor;
}
// ����״̬
public boolean updateStatus(long id, String status){
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(STATUS, status);
db.update(TABLE_NAME, values, INDEX+"="+id, null);
return true;
}
// ����·��
public boolean updatePath(long id, String path){
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(LOCAL_PATH, path);
db.update(TABLE_NAME, values, INDEX+"="+id, null);
return true;
}
public void updateItem(long id, String columnName, String value){
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(columnName, value);
db.update(TABLE_NAME, values, INDEX+"="+id, null);
}
}