package com.realtrackandroid.backend.activities; import java.util.ArrayList; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.realtrackandroid.backend.GlobalDatabaseHelper; import com.realtrackandroid.backend.reminders.RemindersDAO; import com.realtrackandroid.models.activities.Activities; import com.realtrackandroid.models.reminders.Reminders; import com.realtrackandroid.views.activities.EditActivitiesActivity; /* * DAO object to update/delete/add activities */ public class ActivitiesDAO { private GlobalDatabaseHelper opener; private SQLiteDatabase readDatabase; private SQLiteDatabase writeDatabase; private Context context; public ActivitiesDAO(Context context) { this.context = context; this.opener = GlobalDatabaseHelper.getInstance(context); this.readDatabase = opener.getReadableDatabase(); this.writeDatabase = opener.getWritableDatabase(); closeDB(); } private void openDB() { if (!readDatabase.isOpen()) { readDatabase = opener.getReadableDatabase(); } if (!writeDatabase.isOpen()) { writeDatabase = opener.getWritableDatabase(); } } private void closeDB() { if (readDatabase.isOpen()) { readDatabase.close(); } if (writeDatabase.isOpen()) { writeDatabase.close(); } } public ArrayList<Activities> getAllActivitiesForProjectId(int projectid) { openDB(); ArrayList<Activities> output = null; String[] columnsToRead = new String[10]; columnsToRead[0] = Activities.COLUMN_TITLE; columnsToRead[1] = Activities.COLUMN_STARTDATE; columnsToRead[2] = Activities.COLUMN_ENDDATE; columnsToRead[3] = Activities.COLUMN_NOTES; columnsToRead[4] = Activities.COLUMN_ID; columnsToRead[5] = Activities.COLUMN_ORGS; columnsToRead[6] = Activities.COLUMN_COMMS; columnsToRead[7] = Activities.COLUMN_INITIATIVES; columnsToRead[8] = Activities.COLUMN_COHORT; columnsToRead[9] = Activities.COLUMN_CSPP; String whereClause = Activities.COLUMN_PROJECTID + '=' + projectid; Cursor returnData = readDatabase.query(Activities.ACTIVITIES_TABLE, columnsToRead, whereClause, null, null, null, null); output = extractActivities(returnData); closeDB(); return output; } private ArrayList<Activities> extractActivities(Cursor returnData) { // The output ArrayList is initialized ArrayList<Activities> output = new ArrayList<Activities>(); // Move the counter to the first item in the return data returnData.moveToFirst(); int count = 0; // While there are still values in the return data while (!returnData.isAfterLast()) { // Add the new Activities to the ArrayList Activities a = new Activities(); a.setTitle(returnData.getString(0)); a.setStartDate(returnData.getLong(1)); a.setEndDate(returnData.getLong(2)); a.setNotes(returnData.getString(3)); a.setId(Integer.parseInt(returnData.getString(4))); a.setOrgs(returnData.getString(5)); a.setComms(returnData.getString(6)); a.setInitiatives(returnData.getString(7)); a.setCohort(returnData.getString(8)); a.setCspp(returnData.getString(9)); output.add(count, a); // Advance the Cursor returnData.moveToNext(); // Advance the counter count++; } // Return the ArrayList return output; } public Activities getActivityWithId(int id) { openDB(); String[] columnsToRead = new String[11]; columnsToRead[0] = Activities.COLUMN_TITLE; columnsToRead[1] = Activities.COLUMN_STARTDATE; columnsToRead[2] = Activities.COLUMN_ENDDATE; columnsToRead[3] = Activities.COLUMN_NOTES; columnsToRead[4] = Activities.COLUMN_ID; columnsToRead[5] = Activities.COLUMN_ORGS; columnsToRead[6] = Activities.COLUMN_COMMS; columnsToRead[7] = Activities.COLUMN_INITIATIVES; columnsToRead[8] = Activities.COLUMN_PROJECTID; columnsToRead[9] = Activities.COLUMN_COHORT; columnsToRead[10] = Activities.COLUMN_CSPP; String whereClause = Activities.COLUMN_ID + '=' + id; Cursor returnData = readDatabase.query(Activities.ACTIVITIES_TABLE, columnsToRead, whereClause, null, null, null, null); returnData.moveToFirst(); Activities a = new Activities(); a.setTitle(returnData.getString(0)); a.setStartDate(returnData.getLong(1)); a.setEndDate(returnData.getLong(2)); a.setNotes(returnData.getString(3)); a.setId(Integer.parseInt(returnData.getString(4))); a.setOrgs(returnData.getString(5)); a.setComms(returnData.getString(6)); a.setInitiatives(returnData.getString(7)); a.setProjectid(returnData.getInt(8)); a.setCohort(returnData.getString(9)); a.setCspp(returnData.getString(10)); closeDB(); // Return the constructed Activities object return a; } public int addActivities(Activities activity) { openDB(); ContentValues newValue = new ContentValues(9); newValue.put(Activities.COLUMN_TITLE, activity.getTitle()); newValue.put(Activities.COLUMN_STARTDATE, activity.getStartDate()); newValue.put(Activities.COLUMN_ENDDATE, activity.getEndDate()); newValue.put(Activities.COLUMN_NOTES, activity.getNotes()); newValue.put(Activities.COLUMN_ORGS, activity.getOrgs()); newValue.put(Activities.COLUMN_COMMS, activity.getComms()); newValue.put(Activities.COLUMN_INITIATIVES, activity.getInitiatives()); newValue.put(Activities.COLUMN_COHORT, activity.getCohort()); newValue.put(Activities.COLUMN_CSPP, activity.getCspp()); newValue.put(Activities.COLUMN_PROJECTID, activity.getProjectid()); // Insert the item into the database writeDatabase.insert(Activities.ACTIVITIES_TABLE, null, newValue); // return the id of the activity just created. This will be used as the foreign key for the // reminders table Cursor returnData = readDatabase.rawQuery("select seq from sqlite_sequence where name=?", new String[] { Activities.ACTIVITIES_TABLE }); int retVal = -1; if (returnData != null && returnData.moveToFirst()) { retVal = returnData.getInt(0); closeDB(); } return retVal; } public void updateActivities(Activities activity) { openDB(); ContentValues newValue = new ContentValues(9); newValue.put(Activities.COLUMN_TITLE, activity.getTitle()); newValue.put(Activities.COLUMN_STARTDATE, activity.getStartDate()); newValue.put(Activities.COLUMN_ENDDATE, activity.getEndDate()); newValue.put(Activities.COLUMN_NOTES, activity.getNotes()); newValue.put(Activities.COLUMN_ORGS, activity.getOrgs()); newValue.put(Activities.COLUMN_COMMS, activity.getComms()); newValue.put(Activities.COLUMN_INITIATIVES, activity.getInitiatives()); newValue.put(Activities.COLUMN_COHORT, activity.getCohort()); newValue.put(Activities.COLUMN_CSPP, activity.getCspp()); newValue.put(Activities.COLUMN_PROJECTID, activity.getProjectid()); String whereClause = Activities.COLUMN_ID + '=' + activity.getId(); // Update the item into the database writeDatabase.update(Activities.ACTIVITIES_TABLE, newValue, whereClause, null); closeDB(); } public int deleteActivities(int id) { cancelAndDeleteRemindersForActivityId(id); openDB(); String whereClause = Activities.COLUMN_ID + '=' + id; // Return the total number of rows removed int numItemsDeleted = writeDatabase.delete(Activities.ACTIVITIES_TABLE, whereClause, null); closeDB(); return numItemsDeleted; } private void cancelAndDeleteRemindersForActivityId(int activityId) { // cancel all alarms for participation events of the reminders of this activity RemindersDAO rDao = new RemindersDAO(context); ArrayList<Reminders> reminders_data; reminders_data = rDao.getAllRemindersForActivityId(activityId); for (Reminders r : reminders_data) { EditActivitiesActivity.deleteAlarmsForReminder(context, r.getId()); } } }