Updated the database to have a game options table

Note this is not a database upgrade

Change-Id: Id2a9a41108d48140ed5ae35ff00132ce99a7b00e
Signed-off-by: Ricky Barrette <rickbarrette@gmail.com>
This commit is contained in:
2012-02-12 09:10:29 -05:00
parent b434182db3
commit b592403ffe

View File

@@ -39,25 +39,23 @@ public class Database {
*/ */
private final int DATABASE_VERSION = 1; private final int DATABASE_VERSION = 1;
/** /*
* database file name * database file name
*/ */
private final String DATABASE_NAME = "history.db"; private final String DATABASE_NAME = "history.db";
/** /*
* database table for games * database tables
*/ */
private final String GAME_NAME_TABLE = "games"; private final String GAME_NAME_TABLE = "games";
/** private final String GAME_OPTIONS_TABLE = "game_options";
* Database table of history
*/
private final String GAME_HISTORY_TABLE = "history"; private final String GAME_HISTORY_TABLE = "history";
/* /*
* Database keys * Database keys
*/ */
private static final String KEY = "key"; private final String KEY = "key";
private static final String KEY_VALUE = "value"; private final String KEY_VALUE = "value";
/* /*
* database value keys * database value keys
@@ -69,7 +67,13 @@ public class Database {
public final static String KEY_ROLL_ID = "roll_id"; public final static String KEY_ROLL_ID = "roll_id";
public final static String KEY_MOD = "mod"; public final static String KEY_MOD = "mod";
public static final String KEY_ROLLED = "rolled"; public static final String KEY_ROLLED = "rolled";
public static final String KEY_INTENT = "intent";
// public static final String KEY_ = "";
// public static final String KEY_ = "";
// public static final String KEY_ = "";
// public static final String KEY_ = "";
// public static final String KEY_ = "";
// public static final String KEY_ = "";
private static final String TAG = "Database"; private static final String TAG = "Database";
@@ -84,6 +88,7 @@ public class Database {
*/ */
private class OpenHelper extends SQLiteOpenHelper { private class OpenHelper extends SQLiteOpenHelper {
/** /**
* Creates a new OpenHelper * Creates a new OpenHelper
* @param context * @param context
@@ -110,6 +115,12 @@ public class Database {
KEY_ROLL_ID + " TEXT, "+ KEY_ROLL_ID + " TEXT, "+
KEY+" TEXT, " + KEY+" TEXT, " +
KEY_VALUE+" INTEGER)"); KEY_VALUE+" INTEGER)");
db.execSQL("CREATE TABLE " + GAME_OPTIONS_TABLE +
"(id INTEGER PRIMARY KEY, " +
KEY_NAME+" TEXT, " +
KEY+" TEXT, " +
KEY_VALUE+" INTEGER)");
} }
/** /**
@@ -350,6 +361,30 @@ public class Database {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }
/**
* Generates a new ContentValues Object containing the game name, a key, and it's value
* @param gameName
* @param key
* @param value
* @return ContentValues Object containing the game name, a key, and it's value
* @author ricky barrette
*/
private ContentValues generateContentValues(String gameName, String key, Object value) {
ContentValues values = new ContentValues();
values.put(KEY_NAME, gameName);
values.put(KEY, key);
try {
values.put(KEY_VALUE, (String) value);
} catch (ClassCastException e) {
try {
values.put(KEY_VALUE, (Boolean) value ? 1 : 0);
} catch (ClassCastException e1) {
values.put(KEY_VALUE, (Integer) value);
}
}
return values;
}
/** /**
* @return a cursor containing all game names * @return a cursor containing all game names
* @author ricky barrette * @author ricky barrette
@@ -395,17 +430,7 @@ public class Database {
* @author ricky barrette * @author ricky barrette
*/ */
public ContentValues getGameHistoryInfo(String gameName, int rollId){ public ContentValues getGameHistoryInfo(String gameName, int rollId){
ContentValues values = new ContentValues(); return parseCursor(this.mDb.query(GAME_HISTORY_TABLE, new String[]{ KEY, KEY_VALUE }, KEY_NAME +" = "+ DatabaseUtils.sqlEscapeString(gameName) +" AND "+ KEY_ROLL_ID+" = "+rollId, null, null, null, null));
Cursor info = this.mDb.query(GAME_HISTORY_TABLE, new String[]{ KEY, KEY_VALUE }, KEY_NAME +" = "+ DatabaseUtils.sqlEscapeString(gameName) +" AND "+ KEY_ROLL_ID+" = "+rollId, null, null, null, null);
if (info.moveToFirst()) {
do {
values.put(info.getString(0), info.getString(1));
} while (info.moveToNext());
}
if (info != null && !info.isClosed()) {
info.close();
}
return values;
} }
/** /**
@@ -425,6 +450,16 @@ public class Database {
return null; return null;
} }
/**
* Retrieves the game options from the database
* @param gameId
* @return a ContentValues object containing the game's key/value pairs
* @author ricky barrette
*/
public ContentValues getGameOptions(long gameId){
return parseCursor(mDb.query(GAME_HISTORY_TABLE, new String[]{ KEY, KEY_VALUE }, KEY_NAME +" = "+ DatabaseUtils.sqlEscapeString(getGameName(gameId)), null, null, null, null));
}
/** /**
* Retrieves the number of rolls for this game * Retrieves the number of rolls for this game
* @param id * @param id
@@ -479,6 +514,25 @@ public class Database {
} }
} }
/**
* Parses a cursor containing key value pairs
* @param query
* @return
* @author ricky barrette
*/
private ContentValues parseCursor(Cursor query) {
ContentValues values = new ContentValues();
if (query.moveToFirst()) {
do {
values.put(query.getString(query.getColumnIndex(KEY)), query.getString(query.getColumnIndex(KEY_VALUE)));
} while (query.moveToNext());
}
if (query != null && !query.isClosed()) {
query.close();
}
return values;
}
/** /**
* Restores the database from external storage * Restores the database from external storage
* @return true if successful * @return true if successful
@@ -510,10 +564,12 @@ public class Database {
} }
/** /**
* updates a ringer by it's id * updates a game's history by it's id
* @param id * @param id
* @param ringer values * @param gameName
* @param gameHistory values * @param gameHistory
* @param rollId
* @throws NullPointerException
* @author ricky barrette * @author ricky barrette
*/ */
public void updateGame(long id, String gameName, ContentValues gameHistory, int rollId) throws NullPointerException{ public void updateGame(long id, String gameName, ContentValues gameHistory, int rollId) throws NullPointerException{
@@ -527,26 +583,11 @@ public class Database {
throw new NullPointerException("game content was null"); throw new NullPointerException("game content was null");
/* /*
* update the information values in the info table * insert the history information values in the info table
*/ */
for(Entry<String, Object> item : gameHistory.valueSet()){ for(Entry<String, Object> item : gameHistory.valueSet()){
ContentValues values = new ContentValues(); ContentValues values = generateContentValues(gameName, item.getKey(), item.getValue());
values.put(KEY_ROLL_ID, rollId); values.put(KEY_ROLL_ID, rollId);
values.put(KEY_NAME, gameName);
values.put(KEY, item.getKey());
try {
values.put(KEY_VALUE, (String) item.getValue());
} catch (ClassCastException e) {
try {
values.put(KEY_VALUE, (Boolean) item.getValue() ? 1 : 0);
} catch (ClassCastException e1) {
values.put(KEY_VALUE, (Integer) item.getValue());
}
}
/*
* we dont care about updating the history, just insert new information
*/
// if(!(mDb.update(GAME_HISTORY_TABLE, values, KEY_NAME + "="+ DatabaseUtils.sqlEscapeString(gameName) +" AND " + KEY +"='"+ item.getKey()+"'", null) > 0))
mDb.insert(GAME_HISTORY_TABLE, null, values); mDb.insert(GAME_HISTORY_TABLE, null, values);
} }
@@ -559,6 +600,35 @@ public class Database {
mListener.onDatabaseInsertComplete(); mListener.onDatabaseInsertComplete();
} }
/**
* updates a game's options by it's id
* @param id
* @param options values
* @author ricky barrette
*/
public void updateOptions(long id, ContentValues options) throws NullPointerException{
String gameName = getGameName(id);
if(gameName == null || options == null)
throw new NullPointerException("game content was null");
/*
* update the information values in the info table
*/
for(Entry<String, Object> item : options.valueSet()){
ContentValues values = generateContentValues(gameName, item.getKey(), item.getValue());
/*
* try to update existing information, if not, insert the changes
*/
if(!(mDb.update(GAME_OPTIONS_TABLE, values, KEY_NAME + "="+ DatabaseUtils.sqlEscapeString(gameName) +" AND " + KEY +"='"+ item.getKey()+"'", null) > 0))
mDb.insert(GAME_OPTIONS_TABLE, null, values);
}
if(mListener != null)
mListener.onDatabaseInsertComplete();
}
/** /**
* Updates the row ids after a row is deleted * Updates the row ids after a row is deleted
* @param id of the row to start with * @param id of the row to start with