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

Tim Su 14 years ago
parent 3842d43445
commit 2c1a90d178

@ -141,11 +141,13 @@ public class AstridContentProvider {
/** int: unixtime Task was completed, 0 if task not completed */
public static final String COMPLETION_DATE = AstridApiConstants.TASK_TABLE
+ ".completionDate";
/** int: unixtime Task was deleted, 0 if task not deleted */
public static final String DELETION_DATE = AstridApiConstants.TASK_TABLE
+ ".deletionDate";
public static final String MODIFICATION_DATE = null;
// --- urgency settings
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_NONE = 3;
}
// --- internal methods

@ -11,10 +11,10 @@ public class Table extends DBObject<Table> {
}
@SuppressWarnings("nls")
public Field field(String fieldName) {
protected String fieldExpression(String fieldName) {
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;
import android.database.Cursor;
import android.database.DatabaseUtils;
import com.todoroo.android.data.AbstractDao;
import com.todoroo.android.data.AbstractDatabase;
import com.todoroo.android.data.Property;
import com.todoroo.android.data.TodorooCursor;
import com.thoughtworks.sql.Criterion;
import com.thoughtworks.sql.Join;
import com.thoughtworks.sql.Query;
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.Task;
@ -32,18 +34,16 @@ public class MetadataDao extends AbstractDao<Metadata> {
/**
* Generates SQL clauses
*/
public static class MetadataSql {
public static class MetadataCriteria {
/** Returns all metadata associated with a given task */
public static String byTask(long taskId) {
return String.format("(%s = %d)", Metadata.TASK, //$NON-NLS-1$
taskId);
public static Criterion byTask(long taskId) {
return Metadata.TASK.eq(taskId);
}
/** Returns all metadata associated with a given key */
public static String withKey(String key) {
return String.format("(%s = %s)", Metadata.KEY, //$NON-NLS-1$
DatabaseUtils.sqlEscapeString(key));
public static Criterion withKey(String key) {
return Metadata.KEY.eq(key);
}
}
@ -54,8 +54,9 @@ public class MetadataDao extends AbstractDao<Metadata> {
* @param where
* @return # of deleted items
*/
public int deleteWhere(AbstractDatabase database, String where) {
return database.getDatabase().delete(Database.METADATA_TABLE, where, null);
public int deleteWhere(AbstractDatabase database, Criterion where) {
return database.getDatabase().delete(Metadata.TABLE.getName(),
where.toString(), null);
}
/**
@ -65,13 +66,9 @@ public class MetadataDao extends AbstractDao<Metadata> {
* @return
*/
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$
propertiesForSelect(properties, true),
Database.METADATA_TABLE, Database.TASK_TABLE,
Database.METADATA_TABLE, Metadata.TASK, Database.TASK_TABLE,
Task.ID,
Database.TASK_TABLE, Task.TITLE);
Cursor cursor = database.getDatabase().rawQuery(sql, null);
Query sql = Query.select(properties).from(Metadata.TABLE).join(Join.left(Task.TABLE,
Metadata.TASK.eq(Task.ID))).where(Task.TITLE.isNull());
Cursor cursor = database.getDatabase().rawQuery(sql.toString(), null);
return new TodorooCursor<Metadata>(cursor);
}

@ -8,19 +8,16 @@ package com.todoroo.astrid.dao;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import com.thoughtworks.sql.Criterion;
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.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.MetadataDao.MetadataSql;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.model.Task;
/**
@ -44,76 +41,48 @@ public class TaskDao extends AbstractDao<Task> {
/**
* Generates SQL clauses
*/
public static class TaskSql {
public static class TaskCriteria {
/** Returns tasks by id */
public static String byId(long id) {
return String.format("(%s = %d)", Task.ID, //$NON-NLS-1$
id);
public static Criterion byId(long id) {
return Task.ID.eq(id);
}
/** Return tasks that have not yet been completed */
public static String isActive() {
return String.format("(%s = 0 AND %s = 0)", Task.COMPLETION_DATE, //$NON-NLS-1$
Task.DELETION_DATE);
public static Criterion isActive() {
return Criterion.and(Task.COMPLETION_DATE.eq(0),
Task.DELETION_DATE.eq(0));
}
/** Return tasks that are not hidden at given unixtime */
public static String isVisible(int time) {
return String.format("(%s < %d)", Task.HIDDEN_UNTIL, time); //$NON-NLS-1$
public static Criterion isVisible(int time) {
return Task.HIDDEN_UNTIL.lt(time);
}
/** Returns tasks that have a due date */
public static String hasDeadlines() {
return String.format("(%s != 0)", Task.DUE_DATE); //$NON-NLS-1$
public static Criterion hasDeadlines() {
return Task.DUE_DATE.neq(0);
}
/** Returns tasks that are due before a certain unixtime */
public static String dueBefore(int time) {
return String.format("(%s > 0 AND %s <= %d)", Task.DUE_DATE, //$NON-NLS-1$
Task.DUE_DATE, time);
public static Criterion dueBefore(int time) {
return Criterion.and(Task.DUE_DATE.gt(0), Task.DUE_DATE.lt(time));
}
/** Returns tasks that are due after a certain unixtime */
public static String dueAfter(int time) {
return String.format("(%s > %d)", Task.DUE_DATE, time); //$NON-NLS-1$
public static Criterion dueAfter(int time) {
return Task.DUE_DATE.gt(time);
}
/** Returns tasks completed before a given unixtime */
public static String completedBefore(int time) {
return String.format("(%s > 0 AND %s < %d)", Task.COMPLETION_DATE, //$NON-NLS-1$
Task.COMPLETION_DATE, time);
public static Criterion completedBefore(int time) {
return Criterion.and(Task.COMPLETION_DATE.gt(0), Task.COMPLETION_DATE.lt(time));
}
public static String hasNoName() {
return String.format("(%s = \"\")", Task.TITLE); //$NON-NLS-1$
}
}
// --- 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
@ -131,7 +100,7 @@ public class TaskDao extends AbstractDao<Task> {
return false;
// delete all metadata
metadataDao.deleteWhere(database, MetadataSql.byTask(id));
metadataDao.deleteWhere(database, MetadataCriteria.byTask(id));
return true;
}
@ -149,22 +118,16 @@ public class TaskDao extends AbstractDao<Task> {
if (task.getId() == Task.NO_ID) {
task.setValue(Task.CREATION_DATE, DateUtilities.now());
saveSuccessful = createItem(database, 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);
task.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
saveSuccessful = createItem(database, Task.TABLE, task);
} else {
ContentValues values = task.getSetValues();
if(values.size() == 0) // nothing changed
if(values.size() == 0)
return true;
task.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
beforeSave(database, task, values, duringSync);
saveSuccessful = saveItem(database, Database.TASK_TABLE, task);
saveSuccessful = saveItem(database, Task.TABLE, task);
afterSave(database, task, values, duringSync);
}
return saveSuccessful;

@ -61,6 +61,10 @@ public class Task extends AbstractModel {
public static final IntegerProperty CREATION_DATE = new IntegerProperty(
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 */
public static final IntegerProperty COMPLETION_DATE = new IntegerProperty(
TABLE, AstridTask.COMPLETION_DATE);

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

Loading…
Cancel
Save