More work in migrating dao stuff. Almost done. heh.

Tim Su 16 years ago
parent 3842d43445
commit 2c1a90d178

@ -146,6 +146,8 @@ public class AstridContentProvider {
public static final String DELETION_DATE = AstridApiConstants.TASK_TABLE public static final String DELETION_DATE = AstridApiConstants.TASK_TABLE
+ ".deletionDate"; + ".deletionDate";
public static final String MODIFICATION_DATE = null;
// --- urgency settings // --- urgency settings
public static final int URGENCY_NONE = 0; public static final int URGENCY_NONE = 0;
@ -165,6 +167,7 @@ public class AstridContentProvider {
public static final int IMPORTANCE_SHOULD_DO = 2; public static final int IMPORTANCE_SHOULD_DO = 2;
public static final int IMPORTANCE_NONE = 3; public static final int IMPORTANCE_NONE = 3;
} }
// --- internal methods // --- internal methods

@ -11,10 +11,10 @@ public class Table extends DBObject<Table> {
} }
@SuppressWarnings("nls") @SuppressWarnings("nls")
public Field field(String fieldName) { protected String fieldExpression(String fieldName) {
if (hasAlias()) { if (hasAlias()) {
return Field.field(alias + "." + fieldName); return alias + "." + fieldName;
} }
return Field.field(expression+"."+fieldName); return expression+"."+fieldName;
} }
} }

@ -6,12 +6,14 @@
package com.todoroo.astrid.dao; package com.todoroo.astrid.dao;
import android.database.Cursor; import android.database.Cursor;
import android.database.DatabaseUtils;
import com.todoroo.android.data.AbstractDao; import com.thoughtworks.sql.Criterion;
import com.todoroo.android.data.AbstractDatabase; import com.thoughtworks.sql.Join;
import com.todoroo.android.data.Property; import com.thoughtworks.sql.Query;
import com.todoroo.android.data.TodorooCursor; import com.todoroo.andlib.data.AbstractDao;
import com.todoroo.andlib.data.AbstractDatabase;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.astrid.model.Metadata; import com.todoroo.astrid.model.Metadata;
import com.todoroo.astrid.model.Task; import com.todoroo.astrid.model.Task;
@ -32,18 +34,16 @@ public class MetadataDao extends AbstractDao<Metadata> {
/** /**
* Generates SQL clauses * Generates SQL clauses
*/ */
public static class MetadataSql { public static class MetadataCriteria {
/** Returns all metadata associated with a given task */ /** Returns all metadata associated with a given task */
public static String byTask(long taskId) { public static Criterion byTask(long taskId) {
return String.format("(%s = %d)", Metadata.TASK, //$NON-NLS-1$ return Metadata.TASK.eq(taskId);
taskId);
} }
/** Returns all metadata associated with a given key */ /** Returns all metadata associated with a given key */
public static String withKey(String key) { public static Criterion withKey(String key) {
return String.format("(%s = %s)", Metadata.KEY, //$NON-NLS-1$ return Metadata.KEY.eq(key);
DatabaseUtils.sqlEscapeString(key));
} }
} }
@ -54,8 +54,9 @@ public class MetadataDao extends AbstractDao<Metadata> {
* @param where * @param where
* @return # of deleted items * @return # of deleted items
*/ */
public int deleteWhere(AbstractDatabase database, String where) { public int deleteWhere(AbstractDatabase database, Criterion where) {
return database.getDatabase().delete(Database.METADATA_TABLE, where, null); return database.getDatabase().delete(Metadata.TABLE.getName(),
where.toString(), null);
} }
/** /**
@ -65,13 +66,9 @@ public class MetadataDao extends AbstractDao<Metadata> {
* @return * @return
*/ */
public TodorooCursor<Metadata> fetchDangling(AbstractDatabase database, Property<?>[] properties) { public TodorooCursor<Metadata> fetchDangling(AbstractDatabase database, Property<?>[] properties) {
String sql = String.format("SELECT %s FROM %s LEFT JOIN %s ON %s.%s = %s.%s WHERE %s.%s ISNULL", //$NON-NLS-1$ Query sql = Query.select(properties).from(Metadata.TABLE).join(Join.left(Task.TABLE,
propertiesForSelect(properties, true), Metadata.TASK.eq(Task.ID))).where(Task.TITLE.isNull());
Database.METADATA_TABLE, Database.TASK_TABLE, Cursor cursor = database.getDatabase().rawQuery(sql.toString(), null);
Database.METADATA_TABLE, Metadata.TASK, Database.TASK_TABLE,
Task.ID,
Database.TASK_TABLE, Task.TITLE);
Cursor cursor = database.getDatabase().rawQuery(sql, null);
return new TodorooCursor<Metadata>(cursor); return new TodorooCursor<Metadata>(cursor);
} }

@ -8,19 +8,16 @@ package com.todoroo.astrid.dao;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor;
import com.thoughtworks.sql.Criterion;
import com.todoroo.andlib.data.AbstractDao; import com.todoroo.andlib.data.AbstractDao;
import com.todoroo.andlib.data.AbstractDatabase; import com.todoroo.andlib.data.AbstractDatabase;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.MetadataDao.MetadataSql;
import com.todoroo.astrid.model.Task; import com.todoroo.astrid.model.Task;
/** /**
@ -44,76 +41,48 @@ public class TaskDao extends AbstractDao<Task> {
/** /**
* Generates SQL clauses * Generates SQL clauses
*/ */
public static class TaskSql { public static class TaskCriteria {
/** Returns tasks by id */ /** Returns tasks by id */
public static String byId(long id) { public static Criterion byId(long id) {
return String.format("(%s = %d)", Task.ID, //$NON-NLS-1$ return Task.ID.eq(id);
id);
} }
/** Return tasks that have not yet been completed */ /** Return tasks that have not yet been completed */
public static String isActive() { public static Criterion isActive() {
return String.format("(%s = 0 AND %s = 0)", Task.COMPLETION_DATE, //$NON-NLS-1$ return Criterion.and(Task.COMPLETION_DATE.eq(0),
Task.DELETION_DATE); Task.DELETION_DATE.eq(0));
} }
/** Return tasks that are not hidden at given unixtime */ /** Return tasks that are not hidden at given unixtime */
public static String isVisible(int time) { public static Criterion isVisible(int time) {
return String.format("(%s < %d)", Task.HIDDEN_UNTIL, time); //$NON-NLS-1$ return Task.HIDDEN_UNTIL.lt(time);
} }
/** Returns tasks that have a due date */ /** Returns tasks that have a due date */
public static String hasDeadlines() { public static Criterion hasDeadlines() {
return String.format("(%s != 0)", Task.DUE_DATE); //$NON-NLS-1$ return Task.DUE_DATE.neq(0);
} }
/** Returns tasks that are due before a certain unixtime */ /** Returns tasks that are due before a certain unixtime */
public static String dueBefore(int time) { public static Criterion dueBefore(int time) {
return String.format("(%s > 0 AND %s <= %d)", Task.DUE_DATE, //$NON-NLS-1$ return Criterion.and(Task.DUE_DATE.gt(0), Task.DUE_DATE.lt(time));
Task.DUE_DATE, time);
} }
/** Returns tasks that are due after a certain unixtime */ /** Returns tasks that are due after a certain unixtime */
public static String dueAfter(int time) { public static Criterion dueAfter(int time) {
return String.format("(%s > %d)", Task.DUE_DATE, time); //$NON-NLS-1$ return Task.DUE_DATE.gt(time);
} }
/** Returns tasks completed before a given unixtime */ /** Returns tasks completed before a given unixtime */
public static String completedBefore(int time) { public static Criterion completedBefore(int time) {
return String.format("(%s > 0 AND %s < %d)", Task.COMPLETION_DATE, //$NON-NLS-1$ return Criterion.and(Task.COMPLETION_DATE.gt(0), Task.COMPLETION_DATE.lt(time));
Task.COMPLETION_DATE, time);
}
public static String hasNoName() {
return String.format("(%s = \"\")", Task.TITLE); //$NON-NLS-1$
} }
} }
// --- custom operations // --- custom operations
/**
* Return cursor to all tasks matched by given filter
*
* @param database
* @param properties
* properties to read from task
* @param filter
* {@link Filter} object to use
* @return
*/
public TodorooCursor<Task> fetch(Database database, Property<?>[] properties,
Filter filter) {
String query = String.format(
"SELECT %s FROM %s %s ", //$NON-NLS-1$
propertiesForSelect(properties, true),
Database.TASK_TABLE,
filter.sqlQuery);
Cursor cursor = database.getDatabase().rawQuery(query, null);
return new TodorooCursor<Task>(cursor);
}
// --- delete // --- delete
@ -131,7 +100,7 @@ public class TaskDao extends AbstractDao<Task> {
return false; return false;
// delete all metadata // delete all metadata
metadataDao.deleteWhere(database, MetadataSql.byTask(id)); metadataDao.deleteWhere(database, MetadataCriteria.byTask(id));
return true; return true;
} }
@ -149,22 +118,16 @@ public class TaskDao extends AbstractDao<Task> {
if (task.getId() == Task.NO_ID) { if (task.getId() == Task.NO_ID) {
task.setValue(Task.CREATION_DATE, DateUtilities.now()); task.setValue(Task.CREATION_DATE, DateUtilities.now());
saveSuccessful = createItem(database, Database.TASK_TABLE, task); task.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
saveSuccessful = createItem(database, Task.TABLE, task);
Context context = ContextManager.getContext();
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_EVENT_TASK_CREATED);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, task.getId());
context.sendOrderedBroadcast(broadcastIntent, null);
} else { } else {
ContentValues values = task.getSetValues(); ContentValues values = task.getSetValues();
if(values.size() == 0)
if(values.size() == 0) // nothing changed
return true; return true;
task.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
beforeSave(database, task, values, duringSync); beforeSave(database, task, values, duringSync);
saveSuccessful = saveItem(database, Database.TASK_TABLE, task); saveSuccessful = saveItem(database, Task.TABLE, task);
afterSave(database, task, values, duringSync); afterSave(database, task, values, duringSync);
} }
return saveSuccessful; return saveSuccessful;

@ -61,6 +61,10 @@ public class Task extends AbstractModel {
public static final IntegerProperty CREATION_DATE = new IntegerProperty( public static final IntegerProperty CREATION_DATE = new IntegerProperty(
TABLE, AstridTask.CREATION_DATE); TABLE, AstridTask.CREATION_DATE);
/** Unixtime Task was last touched */
public static final IntegerProperty MODIFICATION_DATE = new IntegerProperty(
TABLE, AstridTask.MODIFICATION_DATE);
/** Unixtime Task was completed. 0 means active */ /** Unixtime Task was completed. 0 means active */
public static final IntegerProperty COMPLETION_DATE = new IntegerProperty( public static final IntegerProperty COMPLETION_DATE = new IntegerProperty(
TABLE, AstridTask.COMPLETION_DATE); TABLE, AstridTask.COMPLETION_DATE);

@ -1,14 +1,13 @@
package com.todoroo.astrid.service; package com.todoroo.astrid.service;
import com.todoroo.android.data.Property; import com.todoroo.andlib.data.Property;
import com.todoroo.android.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.android.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.android.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.android.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskDao.TaskSql;
import com.todoroo.astrid.model.Task; import com.todoroo.astrid.model.Task;
/** /**

Loading…
Cancel
Save