package edu.mit.mitmobile2.alerts;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import edu.mit.mitmobile2.objs.ShuttleAlertItem;
public class AlertsDB {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "alerts.db";
private static final String SHUTTLE_ALERTS_TABLE = "alert_items";
private static final String CLASS_ALERTS_TABLE = "alert_items";
// alert table field names
private static final String ID = "_id";
// Shuttles
private static final String ROUTE_ID = "route_id";
private static final String STOP_ID = "stop_id";
private static final String TITLE = "title";
private static final String LAST_UPDATE = "last_update";
private static final String ID_WHERE = ID + "=?";
private static final String SHUTTLE_ID_WHERE = ROUTE_ID + "=?";
SQLiteOpenHelper mAlertsDBHelper;
private static AlertsDB newsDBInstance = null;
/********************************************************************/
public static AlertsDB getInstance(Context context) {
if(newsDBInstance == null) {
newsDBInstance = new AlertsDB(context);
return newsDBInstance;
} else {
return newsDBInstance;
}
}
public void close() {
mAlertsDBHelper.close();
}
private AlertsDB(Context context) {
mAlertsDBHelper = new ShuttleAlertsDatabaseHelper(context);
}
private String[] whereArgs(ShuttleAlertItem ShuttleAlertItem) {
return new String[] {Long.toString(ShuttleAlertItem.id)};
}
/********************************************************************/
synchronized void clearAll() {
SQLiteDatabase db = mAlertsDBHelper.getWritableDatabase();
db.delete(SHUTTLE_ALERTS_TABLE, null, null);
}
synchronized void delete(ShuttleAlertItem mi) {
SQLiteDatabase db = mAlertsDBHelper.getWritableDatabase();
db.delete(SHUTTLE_ALERTS_TABLE, ID_WHERE, whereArgs(mi));
db.close();
mAlertsDBHelper.close();
}
/********************************************************************/
void startTransaction() {
mAlertsDBHelper.getWritableDatabase().beginTransaction();
}
void endTransaction() {
mAlertsDBHelper.getWritableDatabase().setTransactionSuccessful();
mAlertsDBHelper.getWritableDatabase().endTransaction();
}
/********************************************************************/
synchronized void saveShuttleAlertItem(ShuttleAlertItem sai) {
SQLiteDatabase db = mAlertsDBHelper.getWritableDatabase();
ContentValues alertValues = new ContentValues();
alertValues.put(ROUTE_ID, sai.route_id);
alertValues.put(STOP_ID, sai.stop_id);
alertValues.put(TITLE, sai.title);
alertValues.put(LAST_UPDATE, sai.last_update);
long row_id;
int rows;
if(shuttleAlertExists(sai.route_id,sai.stop_id)) {
rows = db.update(SHUTTLE_ALERTS_TABLE, alertValues, ID_WHERE, whereArgs(sai));
Log.d("ShuttleAlertDB","ShuttleAlertDB: updating "+rows);
} else {
row_id = db.insert(SHUTTLE_ALERTS_TABLE, TITLE, alertValues);
Log.d("ShuttleAlertDB","ShuttleAlertDB: adding "+row_id);
}
db.close();
mAlertsDBHelper.close();
}
/********************************************************************/
public Cursor getShuttleAlertsCursor() {
SQLiteDatabase db = mAlertsDBHelper.getReadableDatabase();
String[] fields = new String[] {ID, ROUTE_ID, STOP_ID, TITLE, LAST_UPDATE};
Cursor cursor = db.query(SHUTTLE_ALERTS_TABLE, fields, null, null, null, null, ROUTE_ID + " DESC", null);
return cursor;
}
/********************************************************************/
static ShuttleAlertItem retrieveShuttleAlertItem(Cursor cursor) {
ShuttleAlertItem item = new ShuttleAlertItem();
item.id = cursor.getLong(cursor.getColumnIndex(ID));
item.route_id = cursor.getString(cursor.getColumnIndex(ROUTE_ID));
item.stop_id = cursor.getString(cursor.getColumnIndex(STOP_ID));
item.title = cursor.getString(cursor.getColumnIndex(TITLE));
item.last_update = cursor.getString(cursor.getColumnIndex(LAST_UPDATE));
return item;
}
/********************************************************************/
public ShuttleAlertItem retrieveShuttleAlertItem(String name) {
SQLiteDatabase db = mAlertsDBHelper.getReadableDatabase();
Cursor cursor = db.query(
SHUTTLE_ALERTS_TABLE, null, ID_WHERE, new String[]{name},
null, null, null
);
if (cursor.getCount()<1) return null;
cursor.moveToFirst();
ShuttleAlertItem ShuttleAlertItem = retrieveShuttleAlertItem(cursor);
cursor.close();
mAlertsDBHelper.close();
return ShuttleAlertItem;
}
/********************************************************************/
private boolean shuttleAlertExists(String route, String stop) {
SQLiteDatabase db = mAlertsDBHelper.getReadableDatabase();
Cursor result = db.query(
SHUTTLE_ALERTS_TABLE,
new String[] {ID},
SHUTTLE_ID_WHERE,
new String[] {route}, // TODO add stop
null, null, null);
boolean miExists = (result.getCount() > 0);
result.close();
return miExists;
}
/********************************************************************/
private static class ShuttleAlertsDatabaseHelper extends SQLiteOpenHelper {
ShuttleAlertsDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + SHUTTLE_ALERTS_TABLE + " ("
+ ID + " INTEGER PRIMARY KEY,"
+ ROUTE_ID + " TEXT,"
+ STOP_ID + " TEXT,"
+ TITLE + " TEXT,"
+ LAST_UPDATE + " TEXT"
+ ");");
db.execSQL("CREATE TABLE " + CLASS_ALERTS_TABLE + " ("
+ ID + " INTEGER PRIMARY KEY,"
+ ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// no old versions exists
}
}
}