diff --git a/external-src/com/thoughtworks/sql/DBObject.java b/external-src/com/thoughtworks/sql/DBObject.java index e69b4aaaa..a786b9a3d 100644 --- a/external-src/com/thoughtworks/sql/DBObject.java +++ b/external-src/com/thoughtworks/sql/DBObject.java @@ -42,7 +42,7 @@ public abstract class DBObject> { } @Override - public String toString() { + public final String toString() { StringBuilder sb = new StringBuilder(expression); if (hasAlias()) { sb.append(SPACE).append(AS).append(SPACE).append(alias); diff --git a/external-src/com/thoughtworks/sql/UnaryCriterion.java b/external-src/com/thoughtworks/sql/UnaryCriterion.java index 4c9108e7d..7d1ad45d7 100644 --- a/external-src/com/thoughtworks/sql/UnaryCriterion.java +++ b/external-src/com/thoughtworks/sql/UnaryCriterion.java @@ -33,7 +33,22 @@ public class UnaryCriterion extends Criterion { @SuppressWarnings("nls") protected void afterPopulateOperator(StringBuilder sb) { - sb.append(value == null ? "" : value); + if(value == null) + return; + else if(value instanceof String) + sb.append("'").append(sanitize((String) value)).append("'"); + else + sb.append(value); + } + + /** + * Sanitize the given input for SQL + * @param input + * @return + */ + @SuppressWarnings("nls") + public static String sanitize(String input) { + return input.replace("\\", "\\\\").replace("'", "\\'"); } public static Criterion neq(Field field, Object value) { diff --git a/src-legacy/com/timsu/astrid/data/AbstractController.java b/src-legacy/com/timsu/astrid/data/AbstractController.java index e132c54bc..9aa7d4439 100644 --- a/src-legacy/com/timsu/astrid/data/AbstractController.java +++ b/src-legacy/com/timsu/astrid/data/AbstractController.java @@ -26,6 +26,9 @@ import android.content.Context; import android.database.Cursor; import android.util.Log; +import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.DependencyInjectionService; + /** Abstract controller class. Mostly contains some static fields */ abstract public class AbstractController { @@ -35,11 +38,28 @@ abstract public class AbstractController { public static final String KEY_ROWID = "_id"; // database and table names - public static final String TASK_TABLE_NAME = "tasks"; - public static final String TAG_TABLE_NAME = "tags"; - public static final String TAG_TASK_MAP_NAME = "tagTaskMap"; - public static final String ALERT_TABLE_NAME = "alerts"; - public static final String SYNC_TABLE_NAME = "sync"; + + @Autowired + protected String tasksTable; + + @Autowired + protected String tagsTable; + + @Autowired + protected String tagTaskTable; + + @Autowired + protected String alertsTable; + + @Autowired + protected String syncTable; + + // stuff + + public AbstractController(Context context) { + this.context = context; + DependencyInjectionService.getInstance().inject(this); + } abstract public void open(); abstract public void close(); diff --git a/src-legacy/com/timsu/astrid/data/alerts/AlertController.java b/src-legacy/com/timsu/astrid/data/alerts/AlertController.java index 84d7b0103..6b2fb04cc 100644 --- a/src-legacy/com/timsu/astrid/data/alerts/AlertController.java +++ b/src-legacy/com/timsu/astrid/data/alerts/AlertController.java @@ -42,7 +42,7 @@ public class AlertController extends AbstractController { /** Get a cursor to tag identifiers */ public Cursor getTaskAlertsCursor(TaskIdentifier taskId) throws SQLException { - Cursor cursor = alertDatabase.query(ALERT_TABLE_NAME, + Cursor cursor = alertDatabase.query(alertsTable, Alert.FIELD_LIST, Alert.TASK + " = ?", new String[] { taskId.idAsString() }, null, null, null); return cursor; @@ -52,7 +52,7 @@ public class AlertController extends AbstractController { public List getTaskAlerts(TaskIdentifier taskId) throws SQLException { List list = new LinkedList(); - Cursor cursor = alertDatabase.query(ALERT_TABLE_NAME, + Cursor cursor = alertDatabase.query(alertsTable, Alert.FIELD_LIST, Alert.TASK + " = ?", new String[] { taskId.idAsString() }, null, null, null); @@ -74,7 +74,7 @@ public class AlertController extends AbstractController { /** Get a list of alerts that are set for the future */ public Set getTasksWithActiveAlerts() throws SQLException { Set list = new HashSet(); - Cursor cursor = alertDatabase.query(ALERT_TABLE_NAME, + Cursor cursor = alertDatabase.query(alertsTable, Alert.FIELD_LIST, Alert.DATE + " > ?", new String[] { Long.toString(System.currentTimeMillis()) }, null, null, null); @@ -95,7 +95,7 @@ public class AlertController extends AbstractController { /** Remove all alerts from the task */ public boolean removeAlerts(TaskIdentifier taskId) throws SQLException{ - return alertDatabase.delete(ALERT_TABLE_NAME, + return alertDatabase.delete(alertsTable, String.format("%s = ?", Alert.TASK), new String[] { taskId.idAsString() }) > 0; @@ -107,7 +107,7 @@ public class AlertController extends AbstractController { ContentValues values = new ContentValues(); values.put(Alert.DATE, date.getTime()); values.put(Alert.TASK, taskId.getId()); - return alertDatabase.insert(ALERT_TABLE_NAME, Alert.TASK, + return alertDatabase.insert(alertsTable, Alert.TASK, values) >= 0; } @@ -118,7 +118,7 @@ public class AlertController extends AbstractController { * opened/created */ public AlertController(Context context) { - this.context = context; + super(context); } /** @@ -133,7 +133,7 @@ public class AlertController extends AbstractController { @Override public void open() throws SQLException { alertDatabase = new AlertDatabaseHelper(context, - ALERT_TABLE_NAME, ALERT_TABLE_NAME).getWritableDatabase(); + alertsTable, alertsTable).getWritableDatabase(); } /** Closes database resource */ diff --git a/src-legacy/com/timsu/astrid/data/sync/SyncDataController.java b/src-legacy/com/timsu/astrid/data/sync/SyncDataController.java index 20eaa492e..a4100a1ec 100644 --- a/src-legacy/com/timsu/astrid/data/sync/SyncDataController.java +++ b/src-legacy/com/timsu/astrid/data/sync/SyncDataController.java @@ -19,20 +19,21 @@ */ package com.timsu.astrid.data.sync; +import java.util.HashSet; + import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; + import com.timsu.astrid.data.AbstractController; import com.timsu.astrid.data.sync.SyncMapping.SyncMappingDatabaseHelper; import com.timsu.astrid.data.task.AbstractTaskModel; import com.timsu.astrid.data.task.TaskIdentifier; import com.timsu.astrid.data.task.TaskModelForSync; -import java.util.HashSet; - /** Controller for Tag-related operations */ public class SyncDataController extends AbstractController { @@ -45,7 +46,7 @@ public class SyncDataController extends AbstractController { public boolean clearUpdatedTaskList(int syncServiceId) throws SQLException { ContentValues values = new ContentValues(); values.put(SyncMapping.UPDATED, 0); - return syncDatabase.update(SYNC_TABLE_NAME, values, + return syncDatabase.update(syncTable, values, SyncMapping.SYNC_SERVICE + " = " + syncServiceId, null) > 0; } @@ -53,7 +54,7 @@ public class SyncDataController extends AbstractController { public boolean addToUpdatedList(TaskIdentifier taskId) throws SQLException { ContentValues values = new ContentValues(); values.put(SyncMapping.UPDATED, 1); - return syncDatabase.update(SYNC_TABLE_NAME, values, + return syncDatabase.update(syncTable, values, SyncMapping.TASK + " = " + taskId.getId(), null) > 0; } @@ -71,7 +72,7 @@ public class SyncDataController extends AbstractController { /** Get all mappings for the given synchronization service */ public HashSet getSyncMappings(int syncServiceId) throws SQLException { HashSet list = new HashSet(); - Cursor cursor = syncDatabase.query(SYNC_TABLE_NAME, + Cursor cursor = syncDatabase.query(syncTable, SyncMapping.FIELD_LIST, SyncMapping.SYNC_SERVICE + " = " + syncServiceId, null, null, null, null); @@ -94,7 +95,7 @@ public class SyncDataController extends AbstractController { public HashSet getSyncMappings(TaskIdentifier taskId) throws SQLException { HashSet list = new HashSet(); - Cursor cursor = syncDatabase.query(SYNC_TABLE_NAME, + Cursor cursor = syncDatabase.query(syncTable, SyncMapping.FIELD_LIST, SyncMapping.TASK + " = ?", new String[] { "" + taskId.getId() }, @@ -117,7 +118,7 @@ public class SyncDataController extends AbstractController { /** Get mapping for given task */ public SyncMapping getSyncMapping(int syncServiceId, TaskIdentifier taskId) throws SQLException { - Cursor cursor = syncDatabase.query(SYNC_TABLE_NAME, + Cursor cursor = syncDatabase.query(syncTable, SyncMapping.FIELD_LIST, SyncMapping.SYNC_SERVICE + " = ? AND " + SyncMapping.TASK + " = ?", @@ -136,7 +137,7 @@ public class SyncDataController extends AbstractController { /** Saves the given task to the database. Returns true on success. */ public boolean saveSyncMapping(SyncMapping mapping) { - long newRow = syncDatabase.insert(SYNC_TABLE_NAME, SyncMapping.TASK, + long newRow = syncDatabase.insert(syncTable, SyncMapping.TASK, mapping.getMergedValues()); mapping.setId(newRow); @@ -150,13 +151,13 @@ public class SyncDataController extends AbstractController { if(mapping.getId() == 0) return false; - return syncDatabase.delete(SYNC_TABLE_NAME, KEY_ROWID + "=" + + return syncDatabase.delete(syncTable, KEY_ROWID + "=" + mapping.getId(), null) > 0; } /** Deletes the given mapping. Returns true on success */ public boolean deleteAllMappings(int syncServiceId) { - return syncDatabase.delete(SYNC_TABLE_NAME, SyncMapping.SYNC_SERVICE + + return syncDatabase.delete(syncTable, SyncMapping.SYNC_SERVICE + "=" + syncServiceId, null) > 0; } @@ -167,7 +168,7 @@ public class SyncDataController extends AbstractController { * opened/created */ public SyncDataController(Context context) { - this.context = context; + super(context); } /** @@ -182,7 +183,7 @@ public class SyncDataController extends AbstractController { @Override public synchronized void open() throws SQLException { SQLiteOpenHelper helper = new SyncMappingDatabaseHelper(context, - SYNC_TABLE_NAME, SYNC_TABLE_NAME); + syncTable, syncTable); syncDatabase = helper.getWritableDatabase(); } diff --git a/src-legacy/com/timsu/astrid/data/tag/TagController.java b/src-legacy/com/timsu/astrid/data/tag/TagController.java index f6b0c9325..547be4978 100644 --- a/src-legacy/com/timsu/astrid/data/tag/TagController.java +++ b/src-legacy/com/timsu/astrid/data/tag/TagController.java @@ -19,22 +19,23 @@ */ package com.timsu.astrid.data.tag; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; + import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; + import com.timsu.astrid.data.AbstractController; import com.timsu.astrid.data.tag.AbstractTagModel.TagModelDatabaseHelper; import com.timsu.astrid.data.tag.TagToTaskMapping.TagToTaskMappingDatabaseHelper; -import com.timsu.astrid.data.task.AbstractTaskModel.TaskModelDatabaseHelper; import com.timsu.astrid.data.task.TaskIdentifier; +import com.timsu.astrid.data.task.AbstractTaskModel.TaskModelDatabaseHelper; import com.timsu.astrid.provider.TasksProvider; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; - /** Controller for Tag-related operations */ public class TagController extends AbstractController { @@ -46,7 +47,7 @@ public class TagController extends AbstractController { public LinkedList getAllTags() throws SQLException { LinkedList list = new LinkedList(); - Cursor cursor = tagDatabase.query(TAG_TABLE_NAME, + Cursor cursor = tagDatabase.query(tagsTable, TagModelForView.FIELD_LIST, null, null, null, null, null, null); try { @@ -77,7 +78,7 @@ public class TagController extends AbstractController { public LinkedList getTaskTags(TaskIdentifier taskId) throws SQLException { LinkedList list = new LinkedList(); - Cursor cursor = tagToTaskMapDatabase.query(TAG_TASK_MAP_NAME, + Cursor cursor = tagToTaskMapDatabase.query(tagTaskTable, TagToTaskMapping.FIELD_LIST, TagToTaskMapping.TASK + " = ?", new String[] { taskId.idAsString() }, null, null, null); @@ -101,7 +102,7 @@ public class TagController extends AbstractController { public LinkedList getTaggedTasks(TagIdentifier tagId) throws SQLException { LinkedList list = new LinkedList(); - Cursor cursor = tagToTaskMapDatabase.query(TAG_TASK_MAP_NAME, + Cursor cursor = tagToTaskMapDatabase.query(tagTaskTable, TagToTaskMapping.FIELD_LIST, TagToTaskMapping.TAG + " = ?", new String[] { tagId.idAsString() }, null, null, null); @@ -131,14 +132,14 @@ public class TagController extends AbstractController { HashSet ids = new HashSet(); String[] tagMapColumns = new String[] { TagToTaskMapping.TASK }; - Cursor tagMapCursor = tagToTaskMapDatabase.query(TAG_TASK_MAP_NAME, + Cursor tagMapCursor = tagToTaskMapDatabase.query(tagTaskTable, tagMapColumns, null, null, TagToTaskMapping.TASK, null, TagToTaskMapping.TASK + " ASC"); SQLiteDatabase taskDatabase = new TaskModelDatabaseHelper(context, - TASK_TABLE_NAME, TASK_TABLE_NAME).getReadableDatabase(); + tasksTable, tasksTable).getReadableDatabase(); String[] taskColumns = new String[] { KEY_ROWID }; - Cursor taskCursor = taskDatabase.query(TASK_TABLE_NAME, taskColumns, + Cursor taskCursor = taskDatabase.query(tasksTable, taskColumns, null, null, null, null, KEY_ROWID + " ASC"); LinkedList list = new LinkedList(); @@ -176,7 +177,7 @@ public class TagController extends AbstractController { throw new NullPointerException("Name can't be null"); TagModelForView newTag = new TagModelForView(name); - long row = tagDatabase.insertOrThrow(TAG_TABLE_NAME, AbstractTagModel.NAME, + long row = tagDatabase.insertOrThrow(tagsTable, AbstractTagModel.NAME, newTag.getMergedValues()); return new TagIdentifier(row); } @@ -186,14 +187,14 @@ public class TagController extends AbstractController { boolean saveSucessful; if(tag.getTagIdentifier() == null) { - long newRow = tagDatabase.insert(TAG_TABLE_NAME, AbstractTagModel.NAME, + long newRow = tagDatabase.insert(tagsTable, AbstractTagModel.NAME, tag.getMergedValues()); tag.setTagIdentifier(new TagIdentifier(newRow)); saveSucessful = newRow >= 0; } else { long id = tag.getTagIdentifier().getId(); - saveSucessful = tagDatabase.update(TAG_TABLE_NAME, tag.getSetValues(), + saveSucessful = tagDatabase.update(tagsTable, tag.getSetValues(), KEY_ROWID + "=" + id, null) > 0; } @@ -202,7 +203,7 @@ public class TagController extends AbstractController { /** Returns a TaskModelForView corresponding to the given Tag Name */ public TagModelForView fetchTagFromName(String name) throws SQLException { - Cursor cursor = tagDatabase.query(true, TAG_TABLE_NAME, + Cursor cursor = tagDatabase.query(true, tagsTable, TagModelForView.FIELD_LIST, AbstractTagModel.NAME + " = ?", new String[] {name}, null, null, null, null); @@ -222,7 +223,7 @@ public class TagController extends AbstractController { /** Returns a TaskModelForView corresponding to the given TagIdentifier */ public TagModelForView fetchTagForView(TagIdentifier tagId) throws SQLException { long id = tagId.getId(); - Cursor cursor = tagDatabase.query(true, TAG_TABLE_NAME, + Cursor cursor = tagDatabase.query(true, tagsTable, TagModelForView.FIELD_LIST, KEY_ROWID + "=" + id, null, null, null, null, null); @@ -243,11 +244,11 @@ public class TagController extends AbstractController { /** Deletes the tag and removes tag/task mappings */ public boolean deleteTag( TagIdentifier tagId) throws SQLException{ - if(tagToTaskMapDatabase.delete(TAG_TASK_MAP_NAME, + if(tagToTaskMapDatabase.delete(tagTaskTable, TagToTaskMapping.TAG + " = " + tagId.idAsString(), null) < 0) return false; - int res = tagDatabase.delete(TAG_TABLE_NAME, + int res = tagDatabase.delete(tagsTable, KEY_ROWID + " = " + tagId.idAsString(), null); // notify modification @@ -262,7 +263,7 @@ public class TagController extends AbstractController { public boolean removeTag(TaskIdentifier taskId, TagIdentifier tagId) throws SQLException{ - int res = tagToTaskMapDatabase.delete(TAG_TASK_MAP_NAME, + int res = tagToTaskMapDatabase.delete(tagTaskTable, String.format("%s = ? AND %s = ?", TagToTaskMapping.TAG, TagToTaskMapping.TASK), new String[] { tagId.idAsString(), taskId.idAsString() }); @@ -280,7 +281,7 @@ public class TagController extends AbstractController { values.put(TagToTaskMapping.TAG, tagId.getId()); values.put(TagToTaskMapping.TASK, taskId.getId()); - long res = tagToTaskMapDatabase.insert(TAG_TASK_MAP_NAME, TagToTaskMapping.TAG, + long res = tagToTaskMapDatabase.insert(tagTaskTable, TagToTaskMapping.TAG, values); // notify modification @@ -296,7 +297,7 @@ public class TagController extends AbstractController { * opened/created */ public TagController(Context context) { - this.context = context; + super(context); } /** @@ -311,9 +312,9 @@ public class TagController extends AbstractController { @Override public synchronized void open() throws SQLException { tagToTaskMapDatabase = new TagToTaskMappingDatabaseHelper(context, - TAG_TASK_MAP_NAME, TAG_TASK_MAP_NAME).getWritableDatabase(); + tagTaskTable, tagTaskTable).getWritableDatabase(); tagDatabase = new TagModelDatabaseHelper(context, - TAG_TABLE_NAME, TAG_TABLE_NAME).getWritableDatabase(); + tagsTable, tagsTable).getWritableDatabase(); } /** Closes database resource */ diff --git a/src-legacy/com/timsu/astrid/data/task/TaskController.java b/src-legacy/com/timsu/astrid/data/task/TaskController.java index 629f165aa..8dc28fe1a 100644 --- a/src-legacy/com/timsu/astrid/data/task/TaskController.java +++ b/src-legacy/com/timsu/astrid/data/task/TaskController.java @@ -64,7 +64,7 @@ public class TaskController extends AbstractController { /** Return a list of all active tasks with notifications */ public HashSet getTasksWithNotifications() { HashSet list = new HashSet(); - Cursor cursor = database.query(TASK_TABLE_NAME, TaskModelForNotify.FIELD_LIST, + Cursor cursor = database.query(tasksTable, TaskModelForNotify.FIELD_LIST, String.format("%s < %d AND (%s != 0 OR %s != 0)", AbstractTaskModel.PROGRESS_PERCENTAGE, AbstractTaskModel.COMPLETE_PERCENTAGE, @@ -88,7 +88,7 @@ public class TaskController extends AbstractController { /** Return a list of all active tasks with deadlines */ public ArrayList getTasksWithDeadlines() { ArrayList list = new ArrayList(); - Cursor cursor = database.query(TASK_TABLE_NAME, TaskModelForNotify.FIELD_LIST, + Cursor cursor = database.query(tasksTable, TaskModelForNotify.FIELD_LIST, String.format("%s < %d AND (%s != 0 OR %s != 0)", AbstractTaskModel.PROGRESS_PERCENTAGE, AbstractTaskModel.COMPLETE_PERCENTAGE, @@ -112,7 +112,7 @@ public class TaskController extends AbstractController { /** Return a list of all of the tasks with progress < COMPLETE_PERCENTAGE */ public Cursor getActiveTaskListCursor() { - return database.query(TASK_TABLE_NAME, TaskModelForList.FIELD_LIST, + return database.query(tasksTable, TaskModelForList.FIELD_LIST, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE, null, null, null, null, null); @@ -120,13 +120,13 @@ public class TaskController extends AbstractController { /** Return a list of all tasks */ public Cursor getAllTaskListCursor() { - return database.query(TASK_TABLE_NAME, TaskModelForList.FIELD_LIST, + return database.query(tasksTable, TaskModelForList.FIELD_LIST, null, null, null, null, null, null); } /** Return a list of all tasks */ public Cursor getBackupTaskListCursor() { - return database.query(TASK_TABLE_NAME, TaskModelForXml.FIELD_LIST, + return database.query(tasksTable, TaskModelForXml.FIELD_LIST, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE, null, null, null, null, null); @@ -134,7 +134,7 @@ public class TaskController extends AbstractController { /** Delete all completed tasks with date < older than date */ public int deleteCompletedTasksOlderThan(Date olderThanDate) { - return database.delete(TASK_TABLE_NAME, String.format("`%s` >= '%d' AND `%s` <= '%d'", + return database.delete(tasksTable, String.format("`%s` >= '%d' AND `%s` <= '%d'", AbstractTaskModel.PROGRESS_PERCENTAGE, AbstractTaskModel.COMPLETE_PERCENTAGE, AbstractTaskModel.COMPLETION_DATE, olderThanDate.getTime()), null); } @@ -176,14 +176,14 @@ public class TaskController extends AbstractController { /** Get identifiers for all tasks */ public HashSet getAllTaskIdentifiers() { - Cursor cursor = database.query(TASK_TABLE_NAME, new String[] { KEY_ROWID }, + Cursor cursor = database.query(tasksTable, new String[] { KEY_ROWID }, null, null, null, null, null, null); return createTaskIdentifierSet(cursor); } /** Get identifiers for all non-completed tasks */ public HashSet getActiveTaskIdentifiers() { - Cursor cursor = database.query(TASK_TABLE_NAME, new String[] { KEY_ROWID }, + Cursor cursor = database.query(tasksTable, new String[] { KEY_ROWID }, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE, null, null, null, null, null); return createTaskIdentifierSet(cursor); @@ -191,7 +191,7 @@ public class TaskController extends AbstractController { /** Get identifiers for all non-completed, non-hidden tasks */ public HashSet getActiveVisibleTaskIdentifiers() { - Cursor cursor = database.query(TASK_TABLE_NAME, new String[] { KEY_ROWID }, + Cursor cursor = database.query(tasksTable, new String[] { KEY_ROWID }, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE + " AND (" + AbstractTaskModel.HIDDEN_UNTIL + " ISNULL OR " + AbstractTaskModel.HIDDEN_UNTIL + " < " + @@ -216,7 +216,7 @@ public class TaskController extends AbstractController { if(idList.size() == 0) where.append("0"); - return database.query(true, TASK_TABLE_NAME, + return database.query(true, tasksTable, TaskModelForList.FIELD_LIST, where.toString(), null, null, null, null, null); } @@ -233,7 +233,7 @@ public class TaskController extends AbstractController { // notify modification TasksProvider.notifyDatabaseModification(); - return database.delete(TASK_TABLE_NAME, KEY_ROWID + "=" + id, null) > 0; + return database.delete(tasksTable, KEY_ROWID + "=" + id, null) > 0; } /** Saves the given task to the database. Returns true on success. @@ -244,7 +244,7 @@ public class TaskController extends AbstractController { boolean saveSucessful; if(task.getTaskIdentifier() == null) { - long newRow = database.insert(TASK_TABLE_NAME, AbstractTaskModel.NAME, + long newRow = database.insert(tasksTable, AbstractTaskModel.NAME, task.getMergedValues()); task.setTaskIdentifier(new TaskIdentifier(newRow)); @@ -258,7 +258,7 @@ public class TaskController extends AbstractController { onTaskSave(task, values, duringSync); - saveSucessful = database.update(TASK_TABLE_NAME, values, + saveSucessful = database.update(tasksTable, values, KEY_ROWID + "=" + id, null) > 0; // task was completed @@ -361,7 +361,7 @@ public class TaskController extends AbstractController { RepeatInfo repeatInfo = model.getRepeat(); if(repeatInfo != null) { model.repeatTaskBy(context, this, repeatInfo); - database.update(TASK_TABLE_NAME, values, KEY_ROWID + "=" + + database.update(tasksTable, values, KEY_ROWID + "=" + task.getTaskIdentifier().getId(), null); } @@ -398,7 +398,7 @@ public class TaskController extends AbstractController { cr.delete(Uri.parse(uri), null, null); ContentValues values = new ContentValues(); values.put(AbstractTaskModel.CALENDAR_URI, (String)null); - database.update(TASK_TABLE_NAME, values, KEY_ROWID + "=" + + database.update(tasksTable, values, KEY_ROWID + "=" + taskId.getId(), null); } } catch (Exception e) { @@ -411,7 +411,7 @@ public class TaskController extends AbstractController { public boolean setLastNotificationTime(TaskIdentifier taskId, Date date) { ContentValues values = new ContentValues(); values.put(AbstractTaskModel.LAST_NOTIFIED, date.getTime()); - return database.update(TASK_TABLE_NAME, values, + return database.update(tasksTable, values, KEY_ROWID + "=" + taskId.getId(), null) > 0; } @@ -485,7 +485,7 @@ public class TaskController extends AbstractController { /** Returns a TaskModelForView by name */ public TaskModelForSync searchForTaskForSync(String name) throws SQLException { - Cursor cursor = database.query(true, TASK_TABLE_NAME, TaskModelForSync.FIELD_LIST, + Cursor cursor = database.query(true, tasksTable, TaskModelForSync.FIELD_LIST, AbstractTaskModel.NAME + " = ? AND " + AbstractTaskModel.PROGRESS_PERCENTAGE + " < "+ AbstractTaskModel.COMPLETE_PERCENTAGE, @@ -514,7 +514,7 @@ public class TaskController extends AbstractController { * Don't forget to close the cursor when you're done. */ private Cursor fetchTaskCursor(TaskIdentifier taskId, String[] fieldList) { long id = taskId.getId(); - Cursor cursor = database.query(true, TASK_TABLE_NAME, fieldList, + Cursor cursor = database.query(true, tasksTable, fieldList, KEY_ROWID + "=" + id, null, null, null, null, null); if (cursor == null) throw new SQLException("Returned empty set!"); @@ -531,7 +531,7 @@ public class TaskController extends AbstractController { + AbstractTaskModel.CREATION_DATE + " LIKE ?"; String approximateCreationDate = (creationDate / 1000) + "%"; - Cursor cursor = database.query(true, TASK_TABLE_NAME, fieldList, + Cursor cursor = database.query(true, tasksTable, fieldList, where, new String[] {name, approximateCreationDate}, null, null, null, null); if (cursor == null) throw new SQLException("Returned empty set!"); @@ -571,7 +571,7 @@ public class TaskController extends AbstractController { public ArrayList getTasksForWidget(String limit) { - Cursor cursor = database.query(TASK_TABLE_NAME, TaskModelForWidget.FIELD_LIST, + Cursor cursor = database.query(tasksTable, TaskModelForWidget.FIELD_LIST, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE + " AND (" + AbstractTaskModel.HIDDEN_UNTIL + " ISNULL OR " + AbstractTaskModel.HIDDEN_UNTIL + " < " + @@ -593,7 +593,7 @@ public class TaskController extends AbstractController { public ArrayList getTasksForProvider(String limit) { - Cursor cursor = database.query(TASK_TABLE_NAME, TaskModelForWidget.FIELD_LIST, + Cursor cursor = database.query(tasksTable, TaskModelForWidget.FIELD_LIST, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE + " AND (" + AbstractTaskModel.HIDDEN_UNTIL + " ISNULL OR " + AbstractTaskModel.HIDDEN_UNTIL + " < " + @@ -619,8 +619,8 @@ public class TaskController extends AbstractController { * Constructor - takes the context to allow the database to be * opened/created */ - public TaskController(Context activity) { - this.context = activity; + public TaskController(Context context) { + super(context); } /** @@ -635,7 +635,7 @@ public class TaskController extends AbstractController { @Override public synchronized void open() throws SQLException { SQLiteOpenHelper databaseHelper = new TaskModelDatabaseHelper( - context, TASK_TABLE_NAME, TASK_TABLE_NAME); + context, tasksTable, tasksTable); database = databaseHelper.getWritableDatabase(); } diff --git a/src/com/todoroo/astrid/dao/Database.java b/src/com/todoroo/astrid/dao/Database.java index d5e31386c..f4889d579 100644 --- a/src/com/todoroo/astrid/dao/Database.java +++ b/src/com/todoroo/astrid/dao/Database.java @@ -25,7 +25,7 @@ import com.todoroo.astrid.model.Task; * @author Tim Su * */ -public final class Database extends AbstractDatabase { +public class Database extends AbstractDatabase { // --- constants @@ -96,9 +96,8 @@ public final class Database extends AbstractDatabase { sql.append("CREATE TABLE IF NOT EXISTS ").append(table.name).append('('). append(AbstractModel.ID_PROPERTY).append(" INTEGER PRIMARY KEY AUTOINCREMENT"); for(Property property : table.getProperties()) { - if(AbstractModel.ID_PROPERTY.equals(property.name)) + if(AbstractModel.ID_PROPERTY.name.equals(property.name)) continue; - Log.e("haha", table.name + "'s " + property.name); sql.append(',').append(property.accept(sqlVisitor, null)); } sql.append(')'); diff --git a/src/com/todoroo/astrid/dao/TaskDao.java b/src/com/todoroo/astrid/dao/TaskDao.java index a5291ff00..dd5947531 100644 --- a/src/com/todoroo/astrid/dao/TaskDao.java +++ b/src/com/todoroo/astrid/dao/TaskDao.java @@ -125,14 +125,14 @@ public class TaskDao extends AbstractDao { if (task.getId() == Task.NO_ID) { task.setValue(Task.CREATION_DATE, DateUtilities.now()); task.setValue(Task.MODIFICATION_DATE, DateUtilities.now()); - saveSuccessful = createItem(database, Task.TABLE, task); + saveSuccessful = createItem(database, task); } else { ContentValues values = task.getSetValues(); if(values.size() == 0) return true; task.setValue(Task.MODIFICATION_DATE, DateUtilities.now()); beforeSave(database, task, values, duringSync); - saveSuccessful = saveItem(database, Task.TABLE, task); + saveSuccessful = saveItem(database, task); afterSave(database, task, values, duringSync); } diff --git a/src/com/todoroo/astrid/service/AstridDependencyInjector.java b/src/com/todoroo/astrid/service/AstridDependencyInjector.java index c590455f6..e9b19beac 100644 --- a/src/com/todoroo/astrid/service/AstridDependencyInjector.java +++ b/src/com/todoroo/astrid/service/AstridDependencyInjector.java @@ -86,6 +86,13 @@ public class AstridDependencyInjector implements AbstractDependencyInjector { injectables.put("taskService", TaskService.class); injectables.put("metadataService", MetadataService.class); + // com.timsu.astrid.data + injectables.put("tasksTable", "tasks"); + injectables.put("tagsTable", "tags"); + injectables.put("tagTaskTable", "tagTaskMap"); + injectables.put("alertsTable", "alerts"); + injectables.put("syncTable", "sync"); + // these make reference to fields defined above injectables.put("errorReporters", new ErrorReporter[] { new AndroidLogReporter(), diff --git a/src/com/todoroo/astrid/service/UpgradeService.java b/src/com/todoroo/astrid/service/UpgradeService.java index 0274d94ba..652c357eb 100644 --- a/src/com/todoroo/astrid/service/UpgradeService.java +++ b/src/com/todoroo/astrid/service/UpgradeService.java @@ -17,6 +17,7 @@ import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property.PropertyVisitor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; +import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.model.Task; @@ -30,6 +31,15 @@ public final class UpgradeService { @Autowired private TaskDao taskDao; + @Autowired + private String tasksTable; + + // --- implementation + + public UpgradeService() { + DependencyInjectionService.getInstance().inject(this); + } + /** * Perform upgrade from one version to the next. Needs to be called * on the UI thread so it can display a progress bar and then @@ -107,7 +117,7 @@ public final class UpgradeService { propertyMap.put(AbstractTaskModel.COMPLETION_DATE, Task.COMPLETION_DATE); propertyMap.put(AbstractTaskModel.CALENDAR_URI, Task.CALENDAR_URI); propertyMap.put(AbstractTaskModel.FLAGS, Task.FLAGS); - upgradeTasksTable(context, AbstractController.TASK_TABLE_NAME, + upgradeTasksTable(context, tasksTable, propertyMap, new Task(), taskDao); // --- upgrade tags table @@ -185,7 +195,7 @@ public final class UpgradeService { AbstractDao dao) { SQLiteDatabase upgradeDb = new Astrid2UpgradeHelper(context, legacyTable, - null, 0).getReadableDatabase(); + null, 1).getReadableDatabase(); Cursor cursor = upgradeDb.rawQuery("SELECT * FROM " + legacyTable, null); UpgradeVisitorContainer container = new UpgradeVisitorContainer(); @@ -198,7 +208,7 @@ public final class UpgradeService { container.columnIndex = cursor.getColumnIndex(entry.getKey()); entry.getValue().accept(visitor, container); } - dao.save(database, container.model); + dao.createItem(database, container.model); } upgradeDb.close(); diff --git a/tests/src/com/todoroo/astrid/legacy/data/AbstractController.java b/tests/src/com/todoroo/astrid/legacy/data/AbstractController.java index f2302b0bf..7bbce5a6f 100644 --- a/tests/src/com/todoroo/astrid/legacy/data/AbstractController.java +++ b/tests/src/com/todoroo/astrid/legacy/data/AbstractController.java @@ -22,12 +22,14 @@ package com.todoroo.astrid.legacy.data; import java.lang.reflect.InvocationTargetException; import java.util.Iterator; -import com.timsu.astrid.data.AbstractModel; - import android.content.Context; import android.database.Cursor; import android.util.Log; +import com.timsu.astrid.data.AbstractModel; +import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.DependencyInjectionService; + /** Abstract controller class. Mostly contains some static fields */ abstract public class AbstractController { @@ -37,11 +39,27 @@ abstract public class AbstractController { public static final String KEY_ROWID = "_id"; // database and table names - protected static final String TASK_TABLE_NAME = "tasks"; - protected static final String TAG_TABLE_NAME = "tags"; - protected static final String TAG_TASK_MAP_NAME = "tagTaskMap"; - protected static final String ALERT_TABLE_NAME = "alerts"; - protected static final String SYNC_TABLE_NAME = "sync"; + @Autowired + protected String tasksTable; + + @Autowired + protected String tagsTable; + + @Autowired + protected String tagTaskTable; + + @Autowired + protected String alertsTable; + + @Autowired + protected String syncTable; + + // stuff + + public AbstractController(Context context) { + this.context = context; + DependencyInjectionService.getInstance().inject(this); + } abstract public void open(); abstract public void close(); diff --git a/tests/src/com/todoroo/astrid/legacy/data/alerts/AlertController.java b/tests/src/com/todoroo/astrid/legacy/data/alerts/AlertController.java index d42da70b0..4fbf85b74 100644 --- a/tests/src/com/todoroo/astrid/legacy/data/alerts/AlertController.java +++ b/tests/src/com/todoroo/astrid/legacy/data/alerts/AlertController.java @@ -42,7 +42,7 @@ public class AlertController extends AbstractController { /** Get a cursor to tag identifiers */ public Cursor getTaskAlertsCursor(TaskIdentifier taskId) throws SQLException { - Cursor cursor = alertDatabase.query(ALERT_TABLE_NAME, + Cursor cursor = alertDatabase.query(alertsTable, Alert.FIELD_LIST, Alert.TASK + " = ?", new String[] { taskId.idAsString() }, null, null, null); return cursor; @@ -52,7 +52,7 @@ public class AlertController extends AbstractController { public List getTaskAlerts(TaskIdentifier taskId) throws SQLException { List list = new LinkedList(); - Cursor cursor = alertDatabase.query(ALERT_TABLE_NAME, + Cursor cursor = alertDatabase.query(alertsTable, Alert.FIELD_LIST, Alert.TASK + " = ?", new String[] { taskId.idAsString() }, null, null, null); @@ -74,7 +74,7 @@ public class AlertController extends AbstractController { /** Get a list of alerts that are set for the future */ public Set getTasksWithActiveAlerts() throws SQLException { Set list = new HashSet(); - Cursor cursor = alertDatabase.query(ALERT_TABLE_NAME, + Cursor cursor = alertDatabase.query(alertsTable, Alert.FIELD_LIST, Alert.DATE + " > ?", new String[] { Long.toString(System.currentTimeMillis()) }, null, null, null); @@ -95,7 +95,7 @@ public class AlertController extends AbstractController { /** Remove all alerts from the task */ public boolean removeAlerts(TaskIdentifier taskId) throws SQLException{ - return alertDatabase.delete(ALERT_TABLE_NAME, + return alertDatabase.delete(alertsTable, String.format("%s = ?", Alert.TASK), new String[] { taskId.idAsString() }) > 0; @@ -107,7 +107,7 @@ public class AlertController extends AbstractController { ContentValues values = new ContentValues(); values.put(Alert.DATE, date.getTime()); values.put(Alert.TASK, taskId.getId()); - return alertDatabase.insert(ALERT_TABLE_NAME, Alert.TASK, + return alertDatabase.insert(alertsTable, Alert.TASK, values) >= 0; } @@ -118,7 +118,7 @@ public class AlertController extends AbstractController { * opened/created */ public AlertController(Context context) { - this.context = context; + super(context); } /** @@ -133,7 +133,7 @@ public class AlertController extends AbstractController { @Override public void open() throws SQLException { alertDatabase = new AlertDatabaseHelper(context, - ALERT_TABLE_NAME, ALERT_TABLE_NAME).getWritableDatabase(); + alertsTable, alertsTable).getWritableDatabase(); } /** Closes database resource */ diff --git a/tests/src/com/todoroo/astrid/legacy/data/sync/SyncDataController.java b/tests/src/com/todoroo/astrid/legacy/data/sync/SyncDataController.java index fa6104dce..f5eec2205 100644 --- a/tests/src/com/todoroo/astrid/legacy/data/sync/SyncDataController.java +++ b/tests/src/com/todoroo/astrid/legacy/data/sync/SyncDataController.java @@ -46,7 +46,7 @@ public class SyncDataController extends AbstractController { public boolean clearUpdatedTaskList(int syncServiceId) throws SQLException { ContentValues values = new ContentValues(); values.put(SyncMapping.UPDATED, 0); - return syncDatabase.update(SYNC_TABLE_NAME, values, + return syncDatabase.update(syncTable, values, SyncMapping.SYNC_SERVICE + " = " + syncServiceId, null) > 0; } @@ -54,7 +54,7 @@ public class SyncDataController extends AbstractController { public boolean addToUpdatedList(TaskIdentifier taskId) throws SQLException { ContentValues values = new ContentValues(); values.put(SyncMapping.UPDATED, 1); - return syncDatabase.update(SYNC_TABLE_NAME, values, + return syncDatabase.update(syncTable, values, SyncMapping.TASK + " = " + taskId.getId(), null) > 0; } @@ -72,7 +72,7 @@ public class SyncDataController extends AbstractController { /** Get all mappings for the given synchronization service */ public HashSet getSyncMappings(int syncServiceId) throws SQLException { HashSet list = new HashSet(); - Cursor cursor = syncDatabase.query(SYNC_TABLE_NAME, + Cursor cursor = syncDatabase.query(syncTable, SyncMapping.FIELD_LIST, SyncMapping.SYNC_SERVICE + " = " + syncServiceId, null, null, null, null); @@ -95,7 +95,7 @@ public class SyncDataController extends AbstractController { public HashSet getSyncMappings(TaskIdentifier taskId) throws SQLException { HashSet list = new HashSet(); - Cursor cursor = syncDatabase.query(SYNC_TABLE_NAME, + Cursor cursor = syncDatabase.query(syncTable, SyncMapping.FIELD_LIST, SyncMapping.TASK + " = ?", new String[] { "" + taskId.getId() }, @@ -118,7 +118,7 @@ public class SyncDataController extends AbstractController { /** Get mapping for given task */ public SyncMapping getSyncMapping(int syncServiceId, TaskIdentifier taskId) throws SQLException { - Cursor cursor = syncDatabase.query(SYNC_TABLE_NAME, + Cursor cursor = syncDatabase.query(syncTable, SyncMapping.FIELD_LIST, SyncMapping.SYNC_SERVICE + " = ? AND " + SyncMapping.TASK + " = ?", @@ -137,7 +137,7 @@ public class SyncDataController extends AbstractController { /** Saves the given task to the database. Returns true on success. */ public boolean saveSyncMapping(SyncMapping mapping) { - long newRow = syncDatabase.insert(SYNC_TABLE_NAME, SyncMapping.TASK, + long newRow = syncDatabase.insert(syncTable, SyncMapping.TASK, mapping.getMergedValues()); mapping.setId(newRow); @@ -151,13 +151,13 @@ public class SyncDataController extends AbstractController { if(mapping.getId() == 0) return false; - return syncDatabase.delete(SYNC_TABLE_NAME, KEY_ROWID + "=" + + return syncDatabase.delete(syncTable, KEY_ROWID + "=" + mapping.getId(), null) > 0; } /** Deletes the given mapping. Returns true on success */ public boolean deleteAllMappings(int syncServiceId) { - return syncDatabase.delete(SYNC_TABLE_NAME, SyncMapping.SYNC_SERVICE + + return syncDatabase.delete(syncTable, SyncMapping.SYNC_SERVICE + "=" + syncServiceId, null) > 0; } @@ -168,7 +168,7 @@ public class SyncDataController extends AbstractController { * opened/created */ public SyncDataController(Context context) { - this.context = context; + super(context); } /** @@ -183,7 +183,7 @@ public class SyncDataController extends AbstractController { @Override public synchronized void open() throws SQLException { SQLiteOpenHelper helper = new SyncMappingDatabaseHelper(context, - SYNC_TABLE_NAME, SYNC_TABLE_NAME); + syncTable, syncTable); syncDatabase = helper.getWritableDatabase(); } diff --git a/tests/src/com/todoroo/astrid/legacy/data/tag/TagController.java b/tests/src/com/todoroo/astrid/legacy/data/tag/TagController.java index 0fd8c91ad..24433ea82 100644 --- a/tests/src/com/todoroo/astrid/legacy/data/tag/TagController.java +++ b/tests/src/com/todoroo/astrid/legacy/data/tag/TagController.java @@ -47,7 +47,7 @@ public class TagController extends AbstractController { public LinkedList getAllTags() throws SQLException { LinkedList list = new LinkedList(); - Cursor cursor = tagDatabase.query(TAG_TABLE_NAME, + Cursor cursor = tagDatabase.query(tagsTable, TagModelForView.FIELD_LIST, null, null, null, null, null, null); try { @@ -78,7 +78,7 @@ public class TagController extends AbstractController { public LinkedList getTaskTags(TaskIdentifier taskId) throws SQLException { LinkedList list = new LinkedList(); - Cursor cursor = tagToTaskMapDatabase.query(TAG_TASK_MAP_NAME, + Cursor cursor = tagToTaskMapDatabase.query(tagTaskTable, TagToTaskMapping.FIELD_LIST, TagToTaskMapping.TASK + " = ?", new String[] { taskId.idAsString() }, null, null, null); @@ -102,7 +102,7 @@ public class TagController extends AbstractController { public LinkedList getTaggedTasks(TagIdentifier tagId) throws SQLException { LinkedList list = new LinkedList(); - Cursor cursor = tagToTaskMapDatabase.query(TAG_TASK_MAP_NAME, + Cursor cursor = tagToTaskMapDatabase.query(tagTaskTable, TagToTaskMapping.FIELD_LIST, TagToTaskMapping.TAG + " = ?", new String[] { tagId.idAsString() }, null, null, null); @@ -132,14 +132,14 @@ public class TagController extends AbstractController { HashSet ids = new HashSet(); String[] tagMapColumns = new String[] { TagToTaskMapping.TASK }; - Cursor tagMapCursor = tagToTaskMapDatabase.query(TAG_TASK_MAP_NAME, + Cursor tagMapCursor = tagToTaskMapDatabase.query(tagTaskTable, tagMapColumns, null, null, TagToTaskMapping.TASK, null, TagToTaskMapping.TASK + " ASC"); SQLiteDatabase taskDatabase = new TaskModelDatabaseHelper(context, - TASK_TABLE_NAME, TASK_TABLE_NAME).getReadableDatabase(); + tasksTable, tasksTable).getReadableDatabase(); String[] taskColumns = new String[] { KEY_ROWID }; - Cursor taskCursor = taskDatabase.query(TASK_TABLE_NAME, taskColumns, + Cursor taskCursor = taskDatabase.query(tasksTable, taskColumns, null, null, null, null, KEY_ROWID + " ASC"); LinkedList list = new LinkedList(); @@ -177,7 +177,7 @@ public class TagController extends AbstractController { throw new NullPointerException("Name can't be null"); TagModelForView newTag = new TagModelForView(name); - long row = tagDatabase.insertOrThrow(TAG_TABLE_NAME, AbstractTagModel.NAME, + long row = tagDatabase.insertOrThrow(tagsTable, AbstractTagModel.NAME, newTag.getMergedValues()); return new TagIdentifier(row); } @@ -187,14 +187,14 @@ public class TagController extends AbstractController { boolean saveSucessful; if(tag.getTagIdentifier() == null) { - long newRow = tagDatabase.insert(TAG_TABLE_NAME, AbstractTagModel.NAME, + long newRow = tagDatabase.insert(tagsTable, AbstractTagModel.NAME, tag.getMergedValues()); tag.setTagIdentifier(new TagIdentifier(newRow)); saveSucessful = newRow >= 0; } else { long id = tag.getTagIdentifier().getId(); - saveSucessful = tagDatabase.update(TAG_TABLE_NAME, tag.getSetValues(), + saveSucessful = tagDatabase.update(tagsTable, tag.getSetValues(), KEY_ROWID + "=" + id, null) > 0; } @@ -203,7 +203,7 @@ public class TagController extends AbstractController { /** Returns a TaskModelForView corresponding to the given Tag Name */ public TagModelForView fetchTagFromName(String name) throws SQLException { - Cursor cursor = tagDatabase.query(true, TAG_TABLE_NAME, + Cursor cursor = tagDatabase.query(true, tagsTable, TagModelForView.FIELD_LIST, AbstractTagModel.NAME + " = ?", new String[] {name}, null, null, null, null); @@ -223,7 +223,7 @@ public class TagController extends AbstractController { /** Returns a TaskModelForView corresponding to the given TagIdentifier */ public TagModelForView fetchTagForView(TagIdentifier tagId) throws SQLException { long id = tagId.getId(); - Cursor cursor = tagDatabase.query(true, TAG_TABLE_NAME, + Cursor cursor = tagDatabase.query(true, tagsTable, TagModelForView.FIELD_LIST, KEY_ROWID + "=" + id, null, null, null, null, null); @@ -244,11 +244,11 @@ public class TagController extends AbstractController { /** Deletes the tag and removes tag/task mappings */ public boolean deleteTag( TagIdentifier tagId) throws SQLException{ - if(tagToTaskMapDatabase.delete(TAG_TASK_MAP_NAME, + if(tagToTaskMapDatabase.delete(tagTaskTable, TagToTaskMapping.TAG + " = " + tagId.idAsString(), null) < 0) return false; - int res = tagDatabase.delete(TAG_TABLE_NAME, + int res = tagDatabase.delete(tagsTable, KEY_ROWID + " = " + tagId.idAsString(), null); return res > 0; @@ -260,7 +260,7 @@ public class TagController extends AbstractController { public boolean removeTag(TaskIdentifier taskId, TagIdentifier tagId) throws SQLException{ - int res = tagToTaskMapDatabase.delete(TAG_TASK_MAP_NAME, + int res = tagToTaskMapDatabase.delete(tagTaskTable, String.format("%s = ? AND %s = ?", TagToTaskMapping.TAG, TagToTaskMapping.TASK), new String[] { tagId.idAsString(), taskId.idAsString() }); @@ -278,7 +278,7 @@ public class TagController extends AbstractController { values.put(TagToTaskMapping.TAG, tagId.getId()); values.put(TagToTaskMapping.TASK, taskId.getId()); - long res = tagToTaskMapDatabase.insert(TAG_TASK_MAP_NAME, TagToTaskMapping.TAG, + long res = tagToTaskMapDatabase.insert(tagTaskTable, TagToTaskMapping.TAG, values); return res >= 0; @@ -291,7 +291,7 @@ public class TagController extends AbstractController { * opened/created */ public TagController(Context context) { - this.context = context; + super(context); } /** @@ -306,9 +306,9 @@ public class TagController extends AbstractController { @Override public synchronized void open() throws SQLException { tagToTaskMapDatabase = new TagToTaskMappingDatabaseHelper(context, - TAG_TASK_MAP_NAME, TAG_TASK_MAP_NAME).getWritableDatabase(); + tagTaskTable, tagTaskTable).getWritableDatabase(); tagDatabase = new TagModelDatabaseHelper(context, - TAG_TABLE_NAME, TAG_TABLE_NAME).getWritableDatabase(); + tagsTable, tagsTable).getWritableDatabase(); } /** Closes database resource */ diff --git a/tests/src/com/todoroo/astrid/legacy/data/task/TaskController.java b/tests/src/com/todoroo/astrid/legacy/data/task/TaskController.java index 35124d566..8105e58bc 100644 --- a/tests/src/com/todoroo/astrid/legacy/data/task/TaskController.java +++ b/tests/src/com/todoroo/astrid/legacy/data/task/TaskController.java @@ -55,7 +55,7 @@ public class TaskController extends AbstractController { /** Return a list of all active tasks with notifications */ public HashSet getTasksWithNotifications() { HashSet list = new HashSet(); - Cursor cursor = database.query(TASK_TABLE_NAME, TaskModelForNotify.FIELD_LIST, + Cursor cursor = database.query(tasksTable, TaskModelForNotify.FIELD_LIST, String.format("%s < %d AND (%s != 0 OR %s != 0)", AbstractTaskModel.PROGRESS_PERCENTAGE, AbstractTaskModel.COMPLETE_PERCENTAGE, @@ -79,7 +79,7 @@ public class TaskController extends AbstractController { /** Return a list of all active tasks with deadlines */ public ArrayList getTasksWithDeadlines() { ArrayList list = new ArrayList(); - Cursor cursor = database.query(TASK_TABLE_NAME, TaskModelForNotify.FIELD_LIST, + Cursor cursor = database.query(tasksTable, TaskModelForNotify.FIELD_LIST, String.format("%s < %d AND (%s != 0 OR %s != 0)", AbstractTaskModel.PROGRESS_PERCENTAGE, AbstractTaskModel.COMPLETE_PERCENTAGE, @@ -103,7 +103,7 @@ public class TaskController extends AbstractController { /** Return a list of all of the tasks with progress < COMPLETE_PERCENTAGE */ public Cursor getActiveTaskListCursor() { - return database.query(TASK_TABLE_NAME, TaskModelForList.FIELD_LIST, + return database.query(tasksTable, TaskModelForList.FIELD_LIST, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE, null, null, null, null, null); @@ -111,13 +111,13 @@ public class TaskController extends AbstractController { /** Return a list of all tasks */ public Cursor getAllTaskListCursor() { - return database.query(TASK_TABLE_NAME, TaskModelForList.FIELD_LIST, + return database.query(tasksTable, TaskModelForList.FIELD_LIST, null, null, null, null, null, null); } /** Return a list of all tasks */ public Cursor getBackupTaskListCursor() { - return database.query(TASK_TABLE_NAME, TaskModelForXml.FIELD_LIST, + return database.query(tasksTable, TaskModelForXml.FIELD_LIST, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE, null, null, null, null, null); @@ -125,7 +125,7 @@ public class TaskController extends AbstractController { /** Delete all completed tasks with date < older than date */ public int deleteCompletedTasksOlderThan(Date olderThanDate) { - return database.delete(TASK_TABLE_NAME, String.format("`%s` >= '%d' AND `%s` <= '%d'", + return database.delete(tasksTable, String.format("`%s` >= '%d' AND `%s` <= '%d'", AbstractTaskModel.PROGRESS_PERCENTAGE, AbstractTaskModel.COMPLETE_PERCENTAGE, AbstractTaskModel.COMPLETION_DATE, olderThanDate.getTime()), null); } @@ -167,14 +167,14 @@ public class TaskController extends AbstractController { /** Get identifiers for all tasks */ public HashSet getAllTaskIdentifiers() { - Cursor cursor = database.query(TASK_TABLE_NAME, new String[] { KEY_ROWID }, + Cursor cursor = database.query(tasksTable, new String[] { KEY_ROWID }, null, null, null, null, null, null); return createTaskIdentifierSet(cursor); } /** Get identifiers for all non-completed tasks */ public HashSet getActiveTaskIdentifiers() { - Cursor cursor = database.query(TASK_TABLE_NAME, new String[] { KEY_ROWID }, + Cursor cursor = database.query(tasksTable, new String[] { KEY_ROWID }, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE, null, null, null, null, null); return createTaskIdentifierSet(cursor); @@ -182,7 +182,7 @@ public class TaskController extends AbstractController { /** Get identifiers for all non-completed, non-hidden tasks */ public HashSet getActiveVisibleTaskIdentifiers() { - Cursor cursor = database.query(TASK_TABLE_NAME, new String[] { KEY_ROWID }, + Cursor cursor = database.query(tasksTable, new String[] { KEY_ROWID }, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE + " AND (" + AbstractTaskModel.HIDDEN_UNTIL + " ISNULL OR " + AbstractTaskModel.HIDDEN_UNTIL + " < " + @@ -207,7 +207,7 @@ public class TaskController extends AbstractController { if(idList.size() == 0) where.append("0"); - return database.query(true, TASK_TABLE_NAME, + return database.query(true, tasksTable, TaskModelForList.FIELD_LIST, where.toString(), null, null, null, null, null); } @@ -221,7 +221,7 @@ public class TaskController extends AbstractController { long id = taskId.getId(); cleanupTask(taskId, false); - return database.delete(TASK_TABLE_NAME, KEY_ROWID + "=" + id, null) > 0; + return database.delete(tasksTable, KEY_ROWID + "=" + id, null) > 0; } /** Saves the given task to the database. Returns true on success. @@ -232,7 +232,7 @@ public class TaskController extends AbstractController { boolean saveSucessful; if(task.getTaskIdentifier() == null) { - long newRow = database.insert(TASK_TABLE_NAME, AbstractTaskModel.NAME, + long newRow = database.insert(tasksTable, AbstractTaskModel.NAME, task.getMergedValues()); task.setTaskIdentifier(new TaskIdentifier(newRow)); @@ -246,7 +246,7 @@ public class TaskController extends AbstractController { onTaskSave(task, values, duringSync); - saveSucessful = database.update(TASK_TABLE_NAME, values, + saveSucessful = database.update(tasksTable, values, KEY_ROWID + "=" + id, null) > 0; // task was completed @@ -293,7 +293,7 @@ public class TaskController extends AbstractController { RepeatInfo repeatInfo = model.getRepeat(); if(repeatInfo != null) { model.repeatTaskBy(context, this, repeatInfo); - database.update(TASK_TABLE_NAME, values, KEY_ROWID + "=" + + database.update(tasksTable, values, KEY_ROWID + "=" + task.getTaskIdentifier().getId(), null); } @@ -316,7 +316,7 @@ public class TaskController extends AbstractController { cr.delete(Uri.parse(uri), null, null); ContentValues values = new ContentValues(); values.put(AbstractTaskModel.CALENDAR_URI, (String)null); - database.update(TASK_TABLE_NAME, values, KEY_ROWID + "=" + + database.update(tasksTable, values, KEY_ROWID + "=" + taskId.getId(), null); } } catch (Exception e) { @@ -329,7 +329,7 @@ public class TaskController extends AbstractController { public boolean setLastNotificationTime(TaskIdentifier taskId, Date date) { ContentValues values = new ContentValues(); values.put(AbstractTaskModel.LAST_NOTIFIED, date.getTime()); - return database.update(TASK_TABLE_NAME, values, + return database.update(tasksTable, values, KEY_ROWID + "=" + taskId.getId(), null) > 0; } @@ -403,7 +403,7 @@ public class TaskController extends AbstractController { /** Returns a TaskModelForView by name */ public TaskModelForSync searchForTaskForSync(String name) throws SQLException { - Cursor cursor = database.query(true, TASK_TABLE_NAME, TaskModelForSync.FIELD_LIST, + Cursor cursor = database.query(true, tasksTable, TaskModelForSync.FIELD_LIST, AbstractTaskModel.NAME + " = ? AND " + AbstractTaskModel.PROGRESS_PERCENTAGE + " < "+ AbstractTaskModel.COMPLETE_PERCENTAGE, @@ -432,7 +432,7 @@ public class TaskController extends AbstractController { * Don't forget to close the cursor when you're done. */ private Cursor fetchTaskCursor(TaskIdentifier taskId, String[] fieldList) { long id = taskId.getId(); - Cursor cursor = database.query(true, TASK_TABLE_NAME, fieldList, + Cursor cursor = database.query(true, tasksTable, fieldList, KEY_ROWID + "=" + id, null, null, null, null, null); if (cursor == null) throw new SQLException("Returned empty set!"); @@ -449,7 +449,7 @@ public class TaskController extends AbstractController { + AbstractTaskModel.CREATION_DATE + " LIKE ?"; String approximateCreationDate = (creationDate / 1000) + "%"; - Cursor cursor = database.query(true, TASK_TABLE_NAME, fieldList, + Cursor cursor = database.query(true, tasksTable, fieldList, where, new String[] {name, approximateCreationDate}, null, null, null, null); if (cursor == null) throw new SQLException("Returned empty set!"); @@ -480,7 +480,7 @@ public class TaskController extends AbstractController { public ArrayList getTasksForWidget(String limit) { - Cursor cursor = database.query(TASK_TABLE_NAME, TaskModelForWidget.FIELD_LIST, + Cursor cursor = database.query(tasksTable, TaskModelForWidget.FIELD_LIST, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE + " AND (" + AbstractTaskModel.HIDDEN_UNTIL + " ISNULL OR " + AbstractTaskModel.HIDDEN_UNTIL + " < " + @@ -502,7 +502,7 @@ public class TaskController extends AbstractController { public ArrayList getTasksForProvider(String limit) { - Cursor cursor = database.query(TASK_TABLE_NAME, TaskModelForWidget.FIELD_LIST, + Cursor cursor = database.query(tasksTable, TaskModelForWidget.FIELD_LIST, AbstractTaskModel.PROGRESS_PERCENTAGE + " < " + AbstractTaskModel.COMPLETE_PERCENTAGE + " AND (" + AbstractTaskModel.HIDDEN_UNTIL + " ISNULL OR " + AbstractTaskModel.HIDDEN_UNTIL + " < " + @@ -529,7 +529,7 @@ public class TaskController extends AbstractController { * opened/created */ public TaskController(Context activity) { - this.context = activity; + super(activity); } /** @@ -544,7 +544,7 @@ public class TaskController extends AbstractController { @Override public synchronized void open() throws SQLException { SQLiteOpenHelper databaseHelper = new TaskModelDatabaseHelper( - context, TASK_TABLE_NAME, TASK_TABLE_NAME); + context, tasksTable, tasksTable); database = databaseHelper.getWritableDatabase(); } diff --git a/tests/src/com/todoroo/astrid/provider/ProviderTests.java b/tests/src/com/todoroo/astrid/provider/ProviderTests.java deleted file mode 100644 index ba1e74046..000000000 --- a/tests/src/com/todoroo/astrid/provider/ProviderTests.java +++ /dev/null @@ -1,425 +0,0 @@ -package com.todoroo.astrid.provider; - -import android.content.ContentResolver; -import android.content.ContentValues; -import android.database.Cursor; -import android.net.Uri; - -import com.todoroo.astrid.api.AstridContentProvider; -import com.todoroo.astrid.api.AstridContentProvider.AstridTask; -import com.todoroo.astrid.test.DatabaseTestCase; - -public class ProviderTests extends DatabaseTestCase { - - String[] PROJECTION = new String[] { - AstridTask.ID, - AstridTask.TITLE, - }; - - /** Test CRUD over tasks with the ALL ITEMS cursor */ - public void testAllItemsCrud() { - ContentResolver resolver = getContext().getContentResolver(); - - // fetch all tasks, get nothing - Uri uri = AstridContentProvider.allItemsUri(); - Cursor cursor = resolver.query(uri, PROJECTION, "1", null, null); - assertEquals(0, cursor.getCount()); - cursor.close(); - - // insert a task - ContentValues values = new ContentValues(); - values.put(AstridTask.TITLE, "mf doom?"); - resolver.insert(uri, values); - - // fetch all tasks, get something - cursor = resolver.query(uri, PROJECTION, "1", null, null); - assertEquals(1, cursor.getCount()); - cursor.moveToFirst(); - assertEquals("mf doom?", cursor.getString(1)); - cursor.close(); - - // delete a task - assertEquals(1, resolver.delete(uri, "1", null)); - - // fetch all tasks, get nothing - cursor = resolver.query(uri, PROJECTION, null, null, null); - assertEquals(0, cursor.getCount()); - cursor.close(); - } - - /** Test selecting data */ - public void testSelection() { - ContentResolver resolver = getContext().getContentResolver(); - Uri uri = AstridContentProvider.allItemsUri(); - - // insert some tasks - ContentValues values = new ContentValues(); - values.put(AstridTask.TITLE, "tujiko noriko"); - values.put(AstridTask.IMPORTANCE, AstridTask.IMPORTANCE_MUST_DO); - resolver.insert(uri, values); - - values.clear(); - values.put(AstridTask.TITLE, "miho asahi"); - values.put(AstridTask.IMPORTANCE, AstridTask.IMPORTANCE_NONE); - resolver.insert(uri, values); - - // fetch all tasks with various selection parameters - Cursor cursor = resolver.query(uri, PROJECTION, "1", null, null); - assertEquals(2, cursor.getCount()); - cursor.close(); - - cursor = resolver.query(uri, PROJECTION, null, null, null); - assertEquals(2, cursor.getCount()); - cursor.close(); - - cursor = resolver.query(uri, PROJECTION, AstridTask.IMPORTANCE + "=" + - AstridTask.IMPORTANCE_MUST_DO, null, null); - assertEquals(1, cursor.getCount()); - cursor.moveToFirst(); - assertEquals("tujiko noriko", cursor.getString(1)); - cursor.close(); - - cursor = resolver.query(uri, PROJECTION, AstridTask.IMPORTANCE + "<" + - AstridTask.IMPORTANCE_MUST_DO, null, null); - assertEquals(1, cursor.getCount()); - cursor.moveToFirst(); - assertEquals("miho asahi", cursor.getString(1)); - cursor.close(); - - cursor = resolver.query(uri, PROJECTION, AstridTask.IMPORTANCE + "=" + - AstridTask.IMPORTANCE_DO_OR_DIE, null, null); - assertEquals(0, cursor.getCount()); - cursor.close(); - } - - /** Test selecting data with metadata */ - public void testSelectionWithMetadata() { - ContentResolver resolver = getContext().getContentResolver(); - Uri uri = AstridContentProvider.allItemsUri(); - - // insert some tasks - ContentValues values = new ContentValues(); - values.put(AstridTask.TITLE, "turkoglu"); - values.put("suave-factor", "10"); - resolver.insert(uri, values); - - values.clear(); - values.put(AstridTask.TITLE, "ichiro"); - values.put("suave-factor", "30"); - resolver.insert(uri, values); - - values.clear(); - values.put(AstridTask.TITLE, "oprah"); - values.put("suave-factor", "-10"); - resolver.insert(uri, values); - - values.clear(); - values.put(AstridTask.TITLE, "cruise"); - values.put("suave-factor", "-10"); - resolver.insert(uri, values); - - values.clear(); - values.put(AstridTask.TITLE, "oprah"); - resolver.insert(uri, values); - - String[] projection = new String[] { - AstridTask.ID, - AstridTask.TITLE, - "suave-factor" - }; - - // fetch all tasks with various selection parameters - Cursor cursor = resolver.query(uri, projection, "1", null, null); - assertEquals(3, cursor.getCount()); - cursor.close(); - - cursor = resolver.query(uri, projection, "'suave-factor' = 30", null, null); - assertEquals(1, cursor.getCount()); - cursor.moveToFirst(); - assertEquals("ichiro", cursor.getString(1)); - cursor.close(); - - cursor = resolver.query(uri, projection, "'suave-factor' < 5", null, null); - assertEquals(1, cursor.getCount()); - cursor.moveToFirst(); - assertEquals("cruise", cursor.getString(1)); - cursor.close(); - - cursor = resolver.query(uri, projection, "'suave-factor' ISNULL", null, null); - assertEquals(1, cursor.getCount()); - cursor.moveToFirst(); - assertEquals("oprah", cursor.getString(1)); - cursor.close(); - } - - /** Test updating */ - public void testUpdating() { - ContentResolver resolver = getContext().getContentResolver(); - Uri allItemsUri = AstridContentProvider.allItemsUri(); - - // insert some tasks - ContentValues values = new ContentValues(); - values.put(AstridTask.TITLE, "carlos silva"); - values.put("suckitude", "acute"); - Uri carlosUri = resolver.insert(allItemsUri, values); - - values.clear(); - values.put(AstridTask.TITLE, "felix hernandez"); - values.put(AstridTask.URGENCY, AstridTask.URGENCY_WITHIN_A_YEAR); - resolver.insert(allItemsUri, values); - - String[] projection = new String[] { - AstridTask.ID, - AstridTask.TITLE, - "suckitude" - }; - - // test updating with single item URI - Cursor cursor = resolver.query(allItemsUri, projection, "'suckitude' = 'carlos who?'", null, null); - assertEquals(0, cursor.getCount()); - cursor.close(); - - values.clear(); - values.put("suckitude", "carlos who?"); - assertEquals(1, resolver.update(carlosUri, values, null, null)); - - cursor = resolver.query(allItemsUri, projection, "'suckitude' = 'carlos who?'", null, null); - assertEquals(1, cursor.getCount()); - cursor.close(); - - // test updating with all items uri - cursor = resolver.query(allItemsUri, PROJECTION, AstridTask.URGENCY + " = " + - AstridTask.URGENCY_NONE, null, null); - assertEquals(0, cursor.getCount()); - cursor.close(); - - values.clear(); - values.put(AstridTask.URGENCY, AstridTask.URGENCY_NONE); - assertEquals(1, resolver.update(allItemsUri, values, AstridTask.URGENCY + - "=" + AstridTask.URGENCY_WITHIN_A_YEAR, null)); - - cursor = resolver.query(allItemsUri, PROJECTION, AstridTask.URGENCY + " = " + - AstridTask.URGENCY_NONE, null, null); - assertEquals(1, cursor.getCount()); - cursor.close(); - - // test updating with group by uri - try { - Uri groupByUri = AstridContentProvider.groupByUri(AstridTask.TITLE); - resolver.update(groupByUri, values, null, null); - fail("Able to update using groupby uri"); - } catch (Exception e) { - // expected - } - } - - /** Test deleting */ - public void testDeleting() { - ContentResolver resolver = getContext().getContentResolver(); - Uri allItemsUri = AstridContentProvider.allItemsUri(); - - // insert some tasks - ContentValues values = new ContentValues(); - values.put(AstridTask.TITLE, "modest mouse"); - values.put(AstridTask.IMPORTANCE, AstridTask.IMPORTANCE_DO_OR_DIE); - Uri modestMouse = resolver.insert(allItemsUri, values); - - values.clear(); - values.put(AstridTask.TITLE, "death cab"); - values.put(AstridTask.IMPORTANCE, AstridTask.IMPORTANCE_MUST_DO); - resolver.insert(allItemsUri, values); - - values.clear(); - values.put(AstridTask.TITLE, "murder city devils"); - values.put(AstridTask.IMPORTANCE, AstridTask.IMPORTANCE_SHOULD_DO); - resolver.insert(allItemsUri, values); - - // test deleting with single URI - Cursor cursor = resolver.query(allItemsUri, PROJECTION, AstridTask.TITLE + - " = 'modest mouse'", null, null); - assertEquals(1, cursor.getCount()); - cursor.close(); - - assertEquals(1, resolver.delete(modestMouse, null, null)); - - cursor = resolver.query(allItemsUri, PROJECTION, AstridTask.TITLE + - " = 'modest mouse'", null, null); - assertEquals(0, cursor.getCount()); - cursor.close(); - - // test updating with all items uri - cursor = resolver.query(allItemsUri, PROJECTION, AstridTask.TITLE + - " = 'murder city devils'", null, null); - assertEquals(1, cursor.getCount()); - cursor.close(); - - assertEquals(1, resolver.delete(allItemsUri, AstridTask.IMPORTANCE + - "<" + AstridTask.IMPORTANCE_MUST_DO, null)); - - cursor = resolver.query(allItemsUri, PROJECTION, AstridTask.TITLE + - " = 'murder city devils'", null, null); - assertEquals(0, cursor.getCount()); - cursor.close(); - - // test with group by uri - try { - Uri groupByUri = AstridContentProvider.groupByUri(AstridTask.TITLE); - resolver.delete(groupByUri, null, null); - fail("Able to delete using groupby uri"); - } catch (Exception e) { - // expected - } - } - - /** Test CRUD over SINGLE ITEM uri */ - public void testSingleItemCrud() { - ContentResolver resolver = getContext().getContentResolver(); - - Uri uri = AstridContentProvider.allItemsUri(); - - ContentValues values = new ContentValues(); - values.put(AstridTask.TITLE, "mf doom?"); - Uri firstUri = resolver.insert(uri, values); - - values.put(AstridTask.TITLE, "gm grimm!"); - Uri secondUri = resolver.insert(uri, values); - assertNotSame(firstUri, secondUri); - - Cursor cursor = resolver.query(uri, PROJECTION, "1", null, null); - assertEquals(2, cursor.getCount()); - cursor.close(); - - cursor = resolver.query(firstUri, PROJECTION, null, null, null); - assertEquals(1, cursor.getCount()); - cursor.moveToFirst(); - assertEquals("mf doom?", cursor.getString(1)); - cursor.close(); - - values.put(AstridTask.TITLE, "danger mouse."); - resolver.update(firstUri, values, null, null); - cursor = resolver.query(firstUri, PROJECTION, null, null, null); - assertEquals(1, cursor.getCount()); - cursor.moveToFirst(); - assertEquals("danger mouse.", cursor.getString(1)); - cursor.close(); - - assertEquals(1, resolver.delete(firstUri, null, null)); - - cursor = resolver.query(uri, PROJECTION, null, null, null); - assertEquals(1, cursor.getCount()); - cursor.close(); - } - - /** Test GROUP BY uri */ - public void testGroupByCrud() { - ContentResolver resolver = getContext().getContentResolver(); - Uri uri = AstridContentProvider.allItemsUri(); - - ContentValues values = new ContentValues(); - values.put(AstridTask.TITLE, "catwoman"); - resolver.insert(uri, values); - - values.put(AstridTask.TITLE, "the joker"); - resolver.insert(uri, values); - resolver.insert(uri, values); - resolver.insert(uri, values); - - values.put(AstridTask.TITLE, "deep freeze"); - resolver.insert(uri, values); - resolver.insert(uri, values); - - Uri groupByUri = AstridContentProvider.groupByUri(AstridTask.TITLE); - Cursor cursor = resolver.query(groupByUri, PROJECTION, null, null, AstridTask.TITLE); - assertEquals(3, cursor.getCount()); - cursor.moveToFirst(); - assertEquals("catwoman", cursor.getString(1)); - cursor.moveToNext(); - assertEquals("deep freeze", cursor.getString(1)); - cursor.moveToNext(); - assertEquals("the joker", cursor.getString(1)); - cursor.close(); - - // test "group-by" with metadata - values.put("age", 50); - values.put("size", "large"); - resolver.insert(uri, values); - values.put("age", 40); - values.put("size", "large"); - resolver.insert(uri, values); - - values.put("age", 20); - values.put("size", "small"); - resolver.insert(uri, values); - - Uri groupByAgeUri = AstridContentProvider.groupByUri("size"); - cursor = resolver.query(groupByUri, PROJECTION, null, null, AstridTask.TITLE); - assertEquals(3, cursor.getCount()); - } - - /** Test updating and deleting with metadata */ - public void testMetadataUpdateDelete() { - ContentResolver resolver = getContext().getContentResolver(); - Uri allItemsUri = AstridContentProvider.allItemsUri(); - - // insert some tasks - ContentValues values = new ContentValues(); - values.put(AstridTask.TITLE, "chicago"); - values.put("pizza", "delicious"); - values.put("temperature", 20); - resolver.insert(allItemsUri, values); - - values.clear(); - values.put(AstridTask.TITLE, "san francisco"); - values.put("pizza", "meh"); - values.put("temperature", 60); - resolver.insert(allItemsUri, values); - - values.clear(); - values.put(AstridTask.TITLE, "new york"); - values.put("pizza", "yum"); - values.put("temperature", 30); - resolver.insert(allItemsUri, values); - - // test updating with standard URI (shouldn't work) - values.clear(); - values.put("pizza", "nonexistent, the city is underwater"); - assertEquals(0, resolver.update(allItemsUri, values, - "'pizza'='yum'", null)); - - String[] projection = new String[] { - AstridTask.ID, - AstridTask.TITLE, - "pizza", - "temperature" - }; - - Cursor cursor = resolver.query(allItemsUri, projection, "'pizza' = 'yum'", null, null); - assertEquals(1, cursor.getCount()); - cursor.close(); - - // test updating with metadata uri - Uri pizzaUri = AstridContentProvider.allItemsWithMetadataUri(new String[] {"pizza"}); - assertEquals(1, resolver.update(pizzaUri, values, - "'pizza'='yum'", null)); - - cursor = resolver.query(allItemsUri, projection, "'pizza' = 'yum'", null, null); - assertEquals(0, cursor.getCount()); - cursor.close(); - - // test deleting with metadata uri - Uri pizzaTempUri = AstridContentProvider.allItemsWithMetadataUri(new String[] {"pizza", - "temperature"}); - - cursor = resolver.query(allItemsUri, projection, AstridTask.TITLE + " = 'chicago'", null, null); - assertEquals(0, cursor.getCount()); - cursor.close(); - - // SQLITE: the deliverer of BAD NEWS - assertEquals(0, resolver.delete(pizzaTempUri, "pizza='delicious' AND temperature > 50", null)); - assertEquals(1, resolver.delete(pizzaTempUri, "pizza='delicious' AND temperature < 50", null)); - - cursor = resolver.query(allItemsUri, projection, AstridTask.TITLE + " = 'chicago'", null, null); - assertEquals(0, cursor.getCount()); - cursor.close(); - } -} diff --git a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java index f7a29e9bf..0e9741e41 100644 --- a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java +++ b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java @@ -1,6 +1,7 @@ package com.todoroo.astrid.test; import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.TestDependencyInjector; import com.todoroo.andlib.test.TodorooTestCase; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.service.AstridDependencyInjector; @@ -13,11 +14,24 @@ import com.todoroo.astrid.service.AstridDependencyInjector; */ public class DatabaseTestCase extends TodorooTestCase { + private static final String SYNC_TEST = "synctest"; + private static final String ALERTS_TEST = "alertstest"; + private static final String TAG_TASK_TEST = "tagtasktest"; + private static final String TAGS_TEST = "tagstest"; + private static final String TASKS_TEST = "taskstest"; @Autowired public Database database; static { AstridDependencyInjector.initialize(); + + TestDependencyInjector injector = TestDependencyInjector.initialize("db"); + injector.addInjectable("tasksTable", TASKS_TEST); + injector.addInjectable("tagsTable", TAGS_TEST); + injector.addInjectable("tagTaskTable", TAG_TASK_TEST); + injector.addInjectable("alertsTable", ALERTS_TEST); + injector.addInjectable("syncTable", SYNC_TEST); + injector.addInjectable("database", new TestDatabase()); } @Override @@ -27,10 +41,26 @@ public class DatabaseTestCase extends TodorooTestCase { // create new test database database.clear(); database.openForWriting(); + + // clear legacy databases + getContext().deleteDatabase(TASKS_TEST); + getContext().deleteDatabase(TAGS_TEST); + getContext().deleteDatabase(TAG_TASK_TEST); + getContext().deleteDatabase(ALERTS_TEST); + getContext().deleteDatabase(SYNC_TEST); } @Override protected void tearDown() throws Exception { database.close(); } + + public static class TestDatabase extends Database { + private static final String NAME = "databasetest"; + + @Override + protected String getName() { + return NAME; + } + } } diff --git a/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java b/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java index b9930cd40..8cfd71532 100644 --- a/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java +++ b/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java @@ -30,14 +30,27 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { assertEquals(old.getTime() / 1000L, newDate); } - public void testBasicUpgrades() { + public void xtestEmptyUpgrade() { + TaskController taskController = new TaskController(getContext()); + taskController.open(); + assertEquals(0, taskController.getAllTaskIdentifiers().size()); + + // upgrade + taskController.close(); + upgrade2To3(); + + TodorooCursor tasks = taskDao.query(database, Query.select(Task.PROPERTIES)); + assertEquals(0, tasks.getCount()); + } + + public void testTaskTableUpgrade() { TaskController taskController = new TaskController(getContext()); taskController.open(); // create some ish TaskModelForEdit griffey = new TaskModelForEdit(); griffey.setName("ken griffey jr"); - griffey.setDefiniteDueDate(new Date()); + griffey.setDefiniteDueDate(new Date(1234567L)); griffey.setImportance(Importance.LEVEL_1); griffey.setEstimatedSeconds(3212); griffey.setNotes("debut game: 1989"); @@ -54,15 +67,15 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { Date createdDate = new Date(); // assert created - assertEquals(2, taskController.getAllTaskIdentifiers()); + assertEquals(2, taskController.getAllTaskIdentifiers().size()); // upgrade - taskController.close(); upgrade2To3(); // verify that it ain't no more in the legacy table taskController.open(); - assertEquals(0, taskController.getAllTaskIdentifiers()); + assertEquals(0, taskController.getAllTaskIdentifiers().size()); + taskController.close(); // verify that data exists in our new table TodorooCursor tasks = taskDao.query(database, Query.select(Task.PROPERTIES));