From a1b12d15eff7ad02bb4d8f6d9c26d4cd21fdb551 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Tue, 15 Jun 2010 01:20:01 -0700 Subject: [PATCH] Made significant progress getting upgrade tests to pass. --- .../todoroo/andlib/data/AbstractDatabase.java | 3 ++- .../com/todoroo/andlib/data/AbstractModel.java | 15 ++++++++++++++- .../com/todoroo/andlib/data/sql/DBObject.java | 11 ++++++++--- .../com/todoroo/andlib/data/sql/Query.java | 6 +++--- astrid/src/com/todoroo/astrid/dao/TaskDao.java | 18 +++++++++++++++--- .../service/Astrid2To3UpgradeHelper.java | 11 +++++++---- .../astrid/service/MetadataService.java | 2 +- .../todoroo/astrid/test/DatabaseTestCase.java | 8 +++----- .../astrid/upgrade/Astrid2To3UpgradeTests.java | 5 +++-- 9 files changed, 56 insertions(+), 23 deletions(-) diff --git a/astrid/common-src/com/todoroo/andlib/data/AbstractDatabase.java b/astrid/common-src/com/todoroo/andlib/data/AbstractDatabase.java index bbdc05b8d..e5d268a57 100644 --- a/astrid/common-src/com/todoroo/andlib/data/AbstractDatabase.java +++ b/astrid/common-src/com/todoroo/andlib/data/AbstractDatabase.java @@ -132,8 +132,9 @@ abstract public class AbstractDatabase { * Close the database if it has been opened previously */ public synchronized final void close() { - if(database != null) + if(database != null) { database.close(); + } database = null; } diff --git a/astrid/common-src/com/todoroo/andlib/data/AbstractModel.java b/astrid/common-src/com/todoroo/andlib/data/AbstractModel.java index 61682c9e1..b28e296d1 100644 --- a/astrid/common-src/com/todoroo/andlib/data/AbstractModel.java +++ b/astrid/common-src/com/todoroo/andlib/data/AbstractModel.java @@ -152,7 +152,8 @@ public abstract class AbstractModel implements Parcelable { /** * Utility method to get the identifier of the model, if it exists. - * Returns 0 + * + * @return {@value #NO_ID} if this model was not added to the database */ abstract public long getId(); @@ -175,6 +176,18 @@ public abstract class AbstractModel implements Parcelable { setValues.put(ID_PROPERTY_NAME, id); } + /** + * @param property + * @return true if setValues or values contains this property + */ + public boolean containsValue(Property property) { + if(setValues != null && setValues.containsKey(property.name)) + return true; + if(values != null && values.containsKey(property.name)) + return true; + return false; + } + // --- data storage /** diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/DBObject.java b/astrid/common-src/com/todoroo/andlib/data/sql/DBObject.java index ad8e5ea83..a7bbd25cc 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/DBObject.java +++ b/astrid/common-src/com/todoroo/andlib/data/sql/DBObject.java @@ -3,7 +3,7 @@ package com.todoroo.andlib.data.sql; import static com.todoroo.andlib.data.sql.Constants.AS; import static com.todoroo.andlib.data.sql.Constants.SPACE; -public abstract class DBObject> { +public abstract class DBObject> implements Cloneable { protected String alias; protected final String expression; @@ -12,8 +12,13 @@ public abstract class DBObject> { } public T as(String newAlias) { - this.alias = newAlias; - return (T) this; + try { + T clone = (T) clone(); + clone.alias = newAlias; + return clone; + } catch (CloneNotSupportedException e) { + throw new RuntimeException(e); + } } public boolean hasAlias() { diff --git a/astrid/common-src/com/todoroo/andlib/data/sql/Query.java b/astrid/common-src/com/todoroo/andlib/data/sql/Query.java index 2d37cbf7e..26a70e463 100644 --- a/astrid/common-src/com/todoroo/andlib/data/sql/Query.java +++ b/astrid/common-src/com/todoroo/andlib/data/sql/Query.java @@ -22,17 +22,17 @@ public class Query { private Table table; private List criterions = new ArrayList(); - private List> fields = new ArrayList>(); + private List fields = new ArrayList(); private List joins = new ArrayList(); private List groupBies = new ArrayList(); private List orders = new ArrayList(); private List havings = new ArrayList(); - private Query(Property... fields) { + private Query(Field... fields) { this.fields.addAll(asList(fields)); } - public static Query select(Property... fields) { + public static Query select(Field... fields) { return new Query(fields); } diff --git a/astrid/src/com/todoroo/astrid/dao/TaskDao.java b/astrid/src/com/todoroo/astrid/dao/TaskDao.java index 8417bae19..527c5dd19 100644 --- a/astrid/src/com/todoroo/astrid/dao/TaskDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TaskDao.java @@ -9,6 +9,7 @@ import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.GenericDao; import com.todoroo.andlib.data.sql.Criterion; import com.todoroo.andlib.service.Autowired; @@ -126,14 +127,11 @@ public class TaskDao extends GenericDao { boolean saveSuccessful; if (task.getId() == Task.NO_ID) { - task.setValue(Task.CREATION_DATE, DateUtilities.now()); - task.setValue(Task.MODIFICATION_DATE, DateUtilities.now()); saveSuccessful = createItem(task); } else { ContentValues values = task.getSetValues(); if(values.size() == 0) return true; - task.setValue(Task.MODIFICATION_DATE, DateUtilities.now()); beforeSave(task, values, duringSync); saveSuccessful = saveItem(task); afterSave(task, values, duringSync); @@ -142,6 +140,20 @@ public class TaskDao extends GenericDao { return saveSuccessful; } + @Override + public boolean createItem(AbstractModel item) { + if(!item.containsValue(Task.CREATION_DATE)) + item.setValue(Task.CREATION_DATE, DateUtilities.now()); + item.setValue(Task.MODIFICATION_DATE, DateUtilities.now()); + return super.createItem(item); + } + + @Override + public boolean saveItem(AbstractModel item) { + item.setValue(Task.MODIFICATION_DATE, DateUtilities.now()); + return super.saveItem(item); + } + /** * Called before the task is saved. *
    diff --git a/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java b/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java index f914b5e66..2d35f0245 100644 --- a/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java +++ b/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java @@ -271,19 +271,22 @@ public class Astrid2To3UpgradeHelper { long tagId = -1; String tag = null; for(mapCursor.moveToFirst(); !mapCursor.isAfterLast(); mapCursor.moveToNext()) { - long mapTagId = mapCursor.getLong(1); + long mapTagId = mapCursor.getLong(0); while(mapTagId > tagId && !tagCursor.isLast()) { tagCursor.moveToNext(); - tagId = tagCursor.getLong(1); + tagId = tagCursor.getLong(0); + tag = null; } if(mapTagId == tagId) { if(tag == null) - tag = tagCursor.getString(2); - long task = mapCursor.getLong(2); + tag = tagCursor.getString(1); + long task = mapCursor.getLong(1); + metadata.clear(); metadata.setValue(Metadata.TASK, task); metadata.setValue(Metadata.VALUE, tag); + Log.e("PUT PUT", "PUT task " + task + " and tag " + tag); metadataDao.createItem(metadata); } } diff --git a/astrid/src/com/todoroo/astrid/service/MetadataService.java b/astrid/src/com/todoroo/astrid/service/MetadataService.java index e7c087faf..0b38d1aee 100644 --- a/astrid/src/com/todoroo/astrid/service/MetadataService.java +++ b/astrid/src/com/todoroo/astrid/service/MetadataService.java @@ -69,7 +69,7 @@ public class MetadataService { */ public TodorooCursor fetchWithCount(CountProperty count, Criterion where, Order order, boolean onlyCountsGreaterThanZero) { - Query query = Query.select(Metadata.VALUE, count). + Query query = Query.select(Metadata.VALUE.as(Metadata.VALUE.name), count). where(where).orderBy(order); if(onlyCountsGreaterThanZero) query.having(count.gt(0)); diff --git a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java index 9b6cb7495..7fce23a25 100644 --- a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java +++ b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java @@ -2,7 +2,6 @@ package com.todoroo.astrid.test; import java.io.File; -import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.TestDependencyInjector; import com.todoroo.andlib.test.TodorooTestCase; @@ -24,8 +23,7 @@ public class DatabaseTestCase extends TodorooTestCase { private static final String TAGS_TEST = "tagstest"; private static final String TASKS_TEST = "taskstest"; - @Autowired - public Database database; + public static Database database = new TestDatabase(); public AlarmsDatabase alarmsDatabase; @@ -39,7 +37,7 @@ public class DatabaseTestCase extends TodorooTestCase { injector.addInjectable("tagTaskTable", TAG_TASK_TEST); injector.addInjectable("alertsTable", ALERTS_TEST); injector.addInjectable("syncTable", SYNC_TEST); - injector.addInjectable("database", new TestDatabase()); + injector.addInjectable("database", database); } @Override @@ -49,7 +47,7 @@ public class DatabaseTestCase extends TodorooTestCase { DependencyInjectionService.getInstance().inject(this); // empty out test databases - database.clear(); + database.clear(); deleteDatabase(TASKS_TEST); deleteDatabase(TAGS_TEST); deleteDatabase(TAG_TASK_TEST); diff --git a/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java b/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java index cde6a612a..f259fad18 100644 --- a/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java +++ b/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java @@ -50,6 +50,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { taskController.close(); upgrade2To3(); + database.openForReading(); TodorooCursor tasks = taskDao.query(Query.select(Task.PROPERTIES)); assertEquals(0, tasks.getCount()); } @@ -228,8 +229,8 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { // create some ish TaskModelForEdit christmas = new TaskModelForEdit(); taskController.saveTask(christmas, false); - Date x1 = new Date(0,11,25); - Date x2 = new Date(1,11,25); + Date x1 = new Date(90,11,25); + Date x2 = new Date(91,11,25); alertController.addAlert(christmas.getTaskIdentifier(), x1); alertController.addAlert(christmas.getTaskIdentifier(), x2);