package com.roiding.rterm.util;
import java.util.LinkedList;
import java.util.List;
import tw.kenshinn.keyboardTerm.R;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.roiding.rterm.bean.FunctionButton;
import com.roiding.rterm.bean.Host;
public class DBUtils extends SQLiteOpenHelper {
public DBUtils(Context context) {
super(context, DB_NAME, null, DB_VERSION);
mContext = context;
}
public final static String DB_NAME = "rterm";
public final static int DB_VERSION = 5;
public final static String TABLE_HOSTS = "hosts";
public final static String FIELD_HOSTS_ID = "_id";
public final static String FIELD_HOSTS_NAME = "name";
public final static String FIELD_HOSTS_PROTOCAL = "protocal";
public final static String FIELD_HOSTS_ENCODING = "encoding";
public final static String FIELD_HOSTS_USER = "user";
public final static String FIELD_HOSTS_PASS = "pass";
public final static String FIELD_HOSTS_HOST = "host";
public final static String FIELD_HOSTS_PORT = "port";
public final static String TABLE_FUNCBTNS = "functionbtns";
public final static String FIELD_FUNCBTNS_ID = "_id";
public final static String FIELD_FUNCBTNS_NAME = "name";
public final static String FIELD_FUNCBTNS_KEYS = "keys";
public final static String FIELD_FUNCBTNS_SORTNUMBER = "sortnumber";
public final static String FIELD_FUNCBTNS_OPEN_KEYBOARD = "openkeyboard";
private Context mContext = null;
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_HOSTS
+ " (_id INTEGER PRIMARY KEY, " + FIELD_HOSTS_NAME + " TEXT, "
+ FIELD_HOSTS_PROTOCAL + " TEXT, " + FIELD_HOSTS_ENCODING
+ " TEXT DEFAULT 'GBK'," + FIELD_HOSTS_USER + " TEXT, "
+ FIELD_HOSTS_PASS + " TEXT, " + FIELD_HOSTS_HOST + " TEXT, "
+ FIELD_HOSTS_PORT + " INTEGER)");
db.execSQL("CREATE TABLE " + TABLE_FUNCBTNS
+ " (_id INTEGER PRIMARY KEY, " + FIELD_FUNCBTNS_NAME
+ " TEXT, " + FIELD_FUNCBTNS_KEYS + " TEXT, "
+ FIELD_FUNCBTNS_SORTNUMBER + " INTEGER DEFAULT 0,"
+ FIELD_FUNCBTNS_OPEN_KEYBOARD + " INTEGER DEFAULT 1)"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
case 4: // add open keyboard function
db.execSQL("ALTER TABLE " + TABLE_FUNCBTNS + " ADD COLUMN "
+ FIELD_FUNCBTNS_OPEN_KEYBOARD + " INTEGER DEFAULT 1");
insertNewFunction(db, 5);
}
}
private void insertNewFunction(SQLiteDatabase db, int from) {
String[] functionBtnKey = mContext.getResources().getStringArray(
R.array.function_buttons_key);
String[] functionBtnDesc = mContext.getResources().getStringArray(
R.array.function_buttons_desc);
int[] functionBtnOpenKeyboard = mContext.getResources().getIntArray(
R.array.function_buttons_openkeyboard);
for (int i = from; i < functionBtnKey.length; i++) {
FunctionButton btn = new FunctionButton();
btn.setName(functionBtnDesc[i]);
btn.setKeys(functionBtnKey[i]);
btn.setOpenKeyboard(functionBtnOpenKeyboard[i] == 1);
btn.setSortNumber(i);
long id = db.insert(TABLE_FUNCBTNS, null, btn.getValues());
btn.setId(id);
}
}
public HostsDelegate hostDelegate = new HostsDelegate();
public FunctionButtonsDelegate functionsButtonsDelegate = new FunctionButtonsDelegate();
public class HostsDelegate {
public void delete(Host host) {
if (host.getId() < 0)
return;
SQLiteDatabase db = getWritableDatabase();
db.delete(TABLE_HOSTS, "_id = ?", new String[] { String
.valueOf(host.getId()) });
db.close();
}
public void update(Host host) {
SQLiteDatabase db = getReadableDatabase();
ContentValues values = host.getValues();
db.update(TABLE_HOSTS, values, "_id =?", new String[] { String
.valueOf(host.getId()) });
db.close();
}
public Host insert(Host host) {
SQLiteDatabase db = getWritableDatabase();
long id = db.insert(TABLE_HOSTS, null, host.getValues());
db.close();
host.setId(id);
return host;
}
public List<Host> get() {
List<Host> hosts = new LinkedList<Host>();
SQLiteDatabase db = getReadableDatabase();
Cursor c = db.query(TABLE_HOSTS, null, null, null, null, null,
FIELD_HOSTS_NAME + " ASC");
while (c.moveToNext()) {
Host host = new Host();
host.setId(c.getLong(c.getColumnIndexOrThrow(FIELD_HOSTS_ID)));
host.setName(c.getString(c
.getColumnIndexOrThrow(FIELD_HOSTS_NAME)));
host.setProtocal(c.getString(c
.getColumnIndexOrThrow(FIELD_HOSTS_PROTOCAL)));
host.setEncoding(c.getString(c
.getColumnIndexOrThrow(FIELD_HOSTS_ENCODING)));
host.setUser(c.getString(c
.getColumnIndexOrThrow(FIELD_HOSTS_USER)));
host.setPass(c.getString(c
.getColumnIndexOrThrow(FIELD_HOSTS_PASS)));
host.setHost(c.getString(c
.getColumnIndexOrThrow(FIELD_HOSTS_HOST)));
host.setPort(c
.getInt(c.getColumnIndexOrThrow(FIELD_HOSTS_PORT)));
hosts.add(host);
}
c.close();
db.close();
return hosts;
}
}
public class FunctionButtonsDelegate {
public void delete(FunctionButton btn) {
if (btn.getId() < 0)
return;
SQLiteDatabase db = getWritableDatabase();
db.delete(TABLE_FUNCBTNS, "_id = ?", new String[] { String
.valueOf(btn.getId()) });
db.close();
}
public void update(FunctionButton btn) {
SQLiteDatabase db = getReadableDatabase();
ContentValues values = btn.getValues();
db.update(TABLE_FUNCBTNS, values, "_id =?", new String[] { String
.valueOf(btn.getId()) });
db.close();
}
public FunctionButton insert(FunctionButton btn) {
SQLiteDatabase db = getWritableDatabase();
long id = db.insert(TABLE_FUNCBTNS, null, btn.getValues());
db.close();
btn.setId(id);
return btn;
}
public List<FunctionButton> get() {
List<FunctionButton> btns = new LinkedList<FunctionButton>();
SQLiteDatabase db = getReadableDatabase();
Cursor c = db.query(TABLE_FUNCBTNS, null, null, null, null, null,
FIELD_FUNCBTNS_SORTNUMBER + " ASC");
while (c.moveToNext()) {
FunctionButton btn = new FunctionButton();
btn
.setId(c.getLong(c
.getColumnIndexOrThrow(FIELD_FUNCBTNS_ID)));
btn.setName(c.getString(c
.getColumnIndexOrThrow(FIELD_FUNCBTNS_NAME)));
btn.setKeys(c.getString(c
.getColumnIndexOrThrow(FIELD_FUNCBTNS_KEYS)));
btn.setSortNumber(c.getInt(c
.getColumnIndexOrThrow(FIELD_FUNCBTNS_SORTNUMBER)));
btn.setOpenKeyboard(c.getInt(c
.getColumnIndexOrThrow(FIELD_FUNCBTNS_OPEN_KEYBOARD)) == 1);
btns.add(btn);
}
c.close();
db.close();
return btns;
}
}
}