Constructing task outstanding from master table should include tag_added

pull/14/head
Sam Bosley 13 years ago
parent e2a9d34701
commit 6819e94458

@ -65,8 +65,10 @@ import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.actfm.sync.ActFmServiceException;
import com.todoroo.astrid.actfm.sync.ActFmSyncMonitor;
import com.todoroo.astrid.actfm.sync.messages.ConstructOutstandingTableFromMasterTable;
import com.todoroo.astrid.actfm.sync.messages.ConstructTaskOutstandingTableFromMasterTable;
import com.todoroo.astrid.actfm.sync.messages.NameMaps;
import com.todoroo.astrid.activity.Eula;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TagOutstandingDao;
import com.todoroo.astrid.dao.TaskDao;
@ -80,7 +82,6 @@ import com.todoroo.astrid.data.TagOutstanding;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskListMetadata;
import com.todoroo.astrid.data.TaskListMetadataOutstanding;
import com.todoroo.astrid.data.TaskOutstanding;
import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.data.UserActivityOutstanding;
import com.todoroo.astrid.gtasks.auth.ModernAuthManager;
@ -124,6 +125,8 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener
private TaskListMetadataDao taskListMetadataDao;
@Autowired
private TaskListMetadataOutstandingDao taskListMetadataOutstandingDao;
@Autowired
private MetadataDao metadataDao;
@ -566,7 +569,7 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener
}
// Successful login, create outstanding entries
if (!TextUtils.isEmpty(token)) {
new ConstructOutstandingTableFromMasterTable<Task, TaskOutstanding>(NameMaps.TABLE_ID_TASKS, taskDao, taskOutstandingDao, Task.CREATION_DATE).execute();
new ConstructTaskOutstandingTableFromMasterTable(NameMaps.TABLE_ID_TASKS, taskDao, taskOutstandingDao, metadataDao, Task.CREATION_DATE).execute();
new ConstructOutstandingTableFromMasterTable<TagData, TagOutstanding>(NameMaps.TABLE_ID_TAGS, tagDataDao, tagOutstandingDao, TagData.CREATION_DATE).execute();
new ConstructOutstandingTableFromMasterTable<UserActivity, UserActivityOutstanding>(NameMaps.TABLE_ID_USER_ACTIVITY, userActivityDao, userActivityOutstandingDao, UserActivity.CREATED_AT).execute();
new ConstructOutstandingTableFromMasterTable<TaskListMetadata, TaskListMetadataOutstanding>(NameMaps.TABLE_ID_TASK_LIST_METADATA, taskListMetadataDao, taskListMetadataOutstandingDao, null).execute();

@ -17,10 +17,10 @@ import com.todoroo.astrid.data.RemoteModel;
@SuppressWarnings("nls")
public class ConstructOutstandingTableFromMasterTable<TYPE extends RemoteModel, OE extends OutstandingEntry<TYPE>> {
private final String table;
private final RemoteModelDao<TYPE> dao;
private final OutstandingEntryDao<OE> outstandingDao;
private final LongProperty createdAtProperty;
protected final String table;
protected final RemoteModelDao<TYPE> dao;
protected final OutstandingEntryDao<OE> outstandingDao;
protected final LongProperty createdAtProperty;
public ConstructOutstandingTableFromMasterTable(String table, RemoteModelDao<TYPE> dao,
OutstandingEntryDao<OE> outstandingDao, LongProperty createdAtProperty) {
@ -30,24 +30,31 @@ public class ConstructOutstandingTableFromMasterTable<TYPE extends RemoteModel,
this.createdAtProperty = createdAtProperty;
}
protected void extras(long itemId, long createdAt) {
// Subclasses can override
}
public void execute() {
Property<?>[] syncableProperties = NameMaps.syncableProperties(table);
TodorooCursor<TYPE> items = dao.query(Query.select(AndroidUtilities.addToArray(syncableProperties, AbstractModel.ID_PROPERTY, RemoteModel.UUID_PROPERTY)));
try {
OE oe = outstandingDao.getModelClass().newInstance();
for (items.moveToFirst(); !items.isAfterLast(); items.moveToNext()) {
long createdAt;
if (createdAtProperty != null)
createdAt = items.get(createdAtProperty);
else
createdAt = DateUtilities.now();
long itemId = items.get(AbstractModel.ID_PROPERTY);
for (Property<?> p : syncableProperties) {
oe.clear();
oe.setValue(OutstandingEntry.ENTITY_ID_PROPERTY, itemId);
oe.setValue(OutstandingEntry.COLUMN_STRING_PROPERTY, p.name);
oe.setValue(OutstandingEntry.VALUE_STRING_PROPERTY, items.get(p).toString());
if (createdAtProperty != null)
oe.setValue(OutstandingEntry.CREATED_AT_PROPERTY, items.get(createdAtProperty));
else
oe.setValue(OutstandingEntry.CREATED_AT_PROPERTY, DateUtilities.now());
oe.setValue(OutstandingEntry.CREATED_AT_PROPERTY, createdAt);
outstandingDao.createNew(oe);
}
extras(itemId, createdAt);
}
} catch (IllegalAccessException e) {
Log.e("ConstructOutstanding", "Error instantiating outstanding model class", e);

@ -0,0 +1,48 @@
package com.todoroo.astrid.actfm.sync.messages;
import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.OutstandingEntryDao;
import com.todoroo.astrid.dao.RemoteModelDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskOutstanding;
import com.todoroo.astrid.tags.TaskToTagMetadata;
public class ConstructTaskOutstandingTableFromMasterTable extends ConstructOutstandingTableFromMasterTable<Task, TaskOutstanding> {
private final MetadataDao metadataDao;
public ConstructTaskOutstandingTableFromMasterTable(String table, RemoteModelDao<Task> dao, OutstandingEntryDao<TaskOutstanding> outstandingDao, MetadataDao metadataDao, LongProperty createdAtProperty) {
super(table, dao, outstandingDao, createdAtProperty);
this.metadataDao = metadataDao;
}
@Override
protected void extras(long itemId, long createdAt) {
super.extras(itemId, createdAt);
TodorooCursor<Metadata> tagMetadata = metadataDao.query(Query.select(Metadata.PROPERTIES)
.where(Criterion.and(MetadataCriteria.byTaskAndwithKey(itemId, TaskToTagMetadata.KEY), Metadata.DELETION_DATE.eq(0))));
Metadata m = new Metadata();
try {
for (tagMetadata.moveToFirst(); !tagMetadata.isAfterLast(); tagMetadata.moveToNext()) {
m.clear();
m.readFromCursor(tagMetadata);
TaskOutstanding oe = new TaskOutstanding();
oe.setValue(TaskOutstanding.ENTITY_ID_PROPERTY, itemId);
oe.setValue(TaskOutstanding.COLUMN_STRING, NameMaps.TAG_ADDED_COLUMN);
oe.setValue(TaskOutstanding.VALUE_STRING, m.getValue(TaskToTagMetadata.TAG_UUID));
oe.setValue(TaskOutstanding.CREATED_AT, createdAt);
outstandingDao.createNew(oe);
}
} finally {
tagMetadata.close();
}
}
}

@ -3,24 +3,30 @@ package com.todoroo.astrid.sync;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.actfm.sync.messages.ConstructOutstandingTableFromMasterTable;
import com.todoroo.astrid.actfm.sync.messages.ConstructTaskOutstandingTableFromMasterTable;
import com.todoroo.astrid.actfm.sync.messages.NameMaps;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskOutstanding;
import com.todoroo.astrid.tags.TaskToTagMetadata;
public class ConstructOutstandingFromMasterTest extends NewSyncTestCase {
public void testConstructOutstandingConstructsOutstanding() {
Task t = createTask(true);
Metadata m = TaskToTagMetadata.newTagMetadata(t.getId(), t.getUuid(), "Tag", "2");
m.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
metadataDao.createNew(m);
TodorooCursor<TaskOutstanding> to = taskOutstandingDao.query(Query.select(TaskOutstanding.PROPERTIES));
try {
assertEquals(0, to.getCount());
} finally {
to.close();
}
new ConstructOutstandingTableFromMasterTable<Task, TaskOutstanding>(NameMaps.TABLE_ID_TASKS, taskDao, taskOutstandingDao, Task.CREATION_DATE).execute();
new ConstructTaskOutstandingTableFromMasterTable(NameMaps.TABLE_ID_TASKS, taskDao, taskOutstandingDao, metadataDao, Task.CREATION_DATE).execute();
Property<?>[] syncable = NameMaps.syncableProperties(NameMaps.TABLE_ID_TASKS);
for (Property<?> p : syncable) {
to = taskOutstandingDao.query(Query.select(TaskOutstanding.PROPERTIES).where(TaskOutstanding.COLUMN_STRING.eq(p.name)));
@ -33,6 +39,15 @@ public class ConstructOutstandingFromMasterTest extends NewSyncTestCase {
to.close();
}
}
to = taskOutstandingDao.query(Query.select(TaskOutstanding.PROPERTIES).where(TaskOutstanding.COLUMN_STRING.eq(NameMaps.TAG_ADDED_COLUMN)));
try {
assertEquals(1, to.getCount());
to.moveToFirst();
assertEquals("2", to.get(TaskOutstanding.VALUE_STRING));
} finally {
to.close();
}
}
}

@ -1,6 +1,7 @@
package com.todoroo.astrid.sync;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.RemoteModelDao;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TagOutstandingDao;
@ -12,57 +13,59 @@ import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.test.DatabaseTestCase;
public class NewSyncTestCase extends DatabaseTestCase {
@Autowired
@Autowired
protected TaskDao taskDao;
@Autowired
@Autowired
protected TagDataDao tagDataDao;
@Autowired
@Autowired
protected TaskOutstandingDao taskOutstandingDao;
@Autowired
protected
TagOutstandingDao tagOutstandingDao;
@Autowired
protected TagOutstandingDao tagOutstandingDao;
@Autowired
protected MetadataDao metadataDao;
@Override
protected void setUp() throws Exception {
super.setUp();
RemoteModelDao.outstandingEntryFlag = 1;
}
protected Task createTask(String title, boolean suppress) {
Task task = new Task();
task.setValue(Task.TITLE, title);
task.setValue(Task.IMPORTANCE, SYNC_TASK_IMPORTANCE);
if (suppress)
task.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
taskDao.createNew(task);
return task;
return task;
}
protected Task createTask() {
return createTask(false);
}
public static final String SYNC_TASK_TITLE = "new title";
public static final int SYNC_TASK_IMPORTANCE = Task.IMPORTANCE_MUST_DO;
protected Task createTask(boolean suppress) {
return createTask(SYNC_TASK_TITLE, suppress);
}
protected TagData createTagData(String name, boolean suppress) {
TagData tag = new TagData();
tag.setValue(TagData.NAME, name);
tagDataDao.createNew(tag);
return tag;
}
protected TagData createTagData() {
return createTagData(false);
}
protected TagData createTagData(boolean suppress) {
return createTagData("new tag", suppress);
}

Loading…
Cancel
Save