UNCCGameDay/src/com/uncc/gameday/alerts/AlertDB.java

247 lines
5.8 KiB
Java
Raw Normal View History

package com.uncc.gameday.alerts;
2013-11-21 14:03:23 -05:00
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
2013-11-21 14:03:23 -05:00
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/* Responsible for handling persistence/fetching of alerts */
/**
* The Class AlertDB.
*/
2013-11-21 14:03:23 -05:00
public class AlertDB extends SQLiteOpenHelper {
/** The Constant DATABASE_VERSION. */
2013-11-21 14:03:23 -05:00
private static final int DATABASE_VERSION = 1;
/** The Constant DATABASE_NAME. */
2013-11-21 14:03:23 -05:00
private static final String DATABASE_NAME = "AlertDataBase";
/** The Constant TABLE_ALERTS. */
2013-11-21 14:03:23 -05:00
private static final String TABLE_ALERTS = "alerts";
/** The Constant KEY_ALARM_DATE. */
2013-11-21 14:03:23 -05:00
private static final String KEY_ALARM_DATE = "alarm_date";
/** The Constant KEY_MESSAGE. */
2013-11-21 14:03:23 -05:00
private static final String KEY_MESSAGE = "message";
/** The Constant KEY_SHOWN. */
2013-11-21 14:03:23 -05:00
private static final String KEY_SHOWN = "shown";
/** The Constant KEY_TYPE. */
2013-11-21 14:03:23 -05:00
private static final String KEY_TYPE = "type";
/**
* Instantiates our wrapper around the SQLiteOpenHelper
*
* @param context - The context to open the database in
*/
2013-11-21 14:03:23 -05:00
public AlertDB(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
/**
* Create the initial Database
*/
2013-11-21 14:03:23 -05:00
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_ALERTS_TABLE = "CREATE TABLE " + TABLE_ALERTS + "("
+ KEY_MESSAGE + " STRING PRIMARY KEY," + KEY_ALARM_DATE + " LONG,"
+ KEY_SHOWN + " INT," + KEY_TYPE + " STRING" + ")";
db.execSQL(CREATE_ALERTS_TABLE);
}
/**
* Upgrade the database on application update
*/
2013-11-21 14:03:23 -05:00
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//drop older table if it exists
db.execSQL("DROP OLDER TABLE " + TABLE_ALERTS);
//recreate tables
onCreate(db);
}
/**
* Persist an alert into the database
*
* @param a - The Alert to persist
*/
public void persist(Alert a) {
2013-11-21 14:03:23 -05:00
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_MESSAGE, a.getMessage());
long dateValue = a.getAlarmDate().getTime();
values.put(KEY_ALARM_DATE, dateValue);
values.put(KEY_SHOWN, a.isShown());
values.put(KEY_TYPE, a.getType());
db.insert(TABLE_ALERTS, null, values);
db.close();
}
/**
* Persist a list of alerts into the database -
* helper method for easy iteration
*
* @param alerts - The alerts to store
*/
public void persistMultiple(List<Alert> alerts) {
2013-11-21 14:03:23 -05:00
for(int i = 0; i < alerts.size(); i++)
{
persist(alerts.get(i));
}
}
/**
* Fetch an alert by date
* TODO: Unused. Remove?
*
* @param d - The date to fetch an alert from
* @return the Alert
*/
public Alert fetch(Date d) {
return null;
}
/**
* Fetch multiple alerts from the Database
* TODO: Unused. Remove?
*
* @param dates the dates to fetch alerts from
* @return the list
*/
public List<Alert> fetchMultiple(List<Date> dates) {
return null;
2013-10-09 19:39:20 -04:00
}
2013-10-09 20:20:04 -04:00
/**
* Delete an alert from the Database whenever the Alert message matches
*
* @param alert the alert
*/
2013-11-21 15:52:23 -05:00
public void deleteAlert(Alert alert) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_ALERTS, KEY_MESSAGE + " = ?",
new String[] { String.valueOf(alert.getMessage()) });
db.close();
}
2013-11-21 14:03:23 -05:00
/**
* Fetch all alerts from the Database, and mark as read
*
* @return the list
*/
public List<Alert> fetchAll() {
2013-11-21 14:03:23 -05:00
List<Alert> alertList = new ArrayList<Alert>();
String selectQuery = "SELECT * FROM " + TABLE_ALERTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
//for each alert in database
//add it to alert list to be shown
//and modify it in DB to be classified as shown
if (cursor.moveToFirst())
{
do
{
Alert alert = new Alert();
alert.setMessage(cursor.getString(0));
alert.setAlarmDate(new Date(cursor.getLong(1)));
alert.setShown(cursor.getInt(2));
updateAlert(alert);
alertList.add(alert);
} while (cursor.moveToNext());
}
db.close();
return alertList;
2013-10-09 20:20:04 -04:00
}
/**
* Fetch unread alerts from the database, and mark them as read
*
* @return the list
*/
public List<Alert> fetchUnread() {
2013-11-21 14:03:23 -05:00
List<Alert> alertList = new ArrayList<Alert>();
String selectQuery = "SELECT * FROM " + TABLE_ALERTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
//for each alert in database
//given it is classified as unread
//add it to alert list to be shown
//and modify it in DB to be classified as shown
if (cursor.moveToFirst())
{
do
{
Alert alert = new Alert();
if(cursor.getInt(2) == 0)
{
alert.setMessage(cursor.getString(0));
alert.setAlarmDate(new Date(cursor.getLong(1)));
alert.setShown(cursor.getInt(2));
updateAlert(alert);
alertList.add(alert);
}
} while (cursor.moveToNext());
}
db.close();
return alertList;
}
/**
* Update an alert to be marked as shown
*
* @param alert the alert
* @return the int
*/
2013-11-21 14:03:23 -05:00
private int updateAlert(Alert alert) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
long dateValue = alert.getAlarmDate().getTime();
values.put(KEY_ALARM_DATE, dateValue);
values.put(KEY_SHOWN, 1);
return db.update(TABLE_ALERTS, values, KEY_MESSAGE + " = ?",
new String[] { String.valueOf(alert.getMessage()) });
}
2013-11-21 14:03:23 -05:00
}
2013-11-21 14:03:23 -05:00