mirror of https://github.com/tasks/tasks
Cherry pick some code for migration to using uuids
parent
ce7aba15cf
commit
978fe02718
@ -0,0 +1,100 @@
|
|||||||
|
package com.todoroo.astrid.tags;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.todoroo.andlib.data.DatabaseDao;
|
||||||
|
import com.todoroo.andlib.data.TodorooCursor;
|
||||||
|
import com.todoroo.andlib.service.Autowired;
|
||||||
|
import com.todoroo.andlib.service.DependencyInjectionService;
|
||||||
|
import com.todoroo.andlib.sql.Criterion;
|
||||||
|
import com.todoroo.andlib.sql.Query;
|
||||||
|
import com.todoroo.andlib.utility.Pair;
|
||||||
|
import com.todoroo.andlib.utility.Preferences;
|
||||||
|
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
|
||||||
|
import com.todoroo.astrid.dao.TagDataDao;
|
||||||
|
import com.todoroo.astrid.dao.TaskDao;
|
||||||
|
import com.todoroo.astrid.dao.UpdateDao;
|
||||||
|
import com.todoroo.astrid.data.Metadata;
|
||||||
|
import com.todoroo.astrid.data.RemoteModel;
|
||||||
|
import com.todoroo.astrid.data.TagData;
|
||||||
|
import com.todoroo.astrid.data.Task;
|
||||||
|
import com.todoroo.astrid.data.Update;
|
||||||
|
import com.todoroo.astrid.helper.UUIDHelper;
|
||||||
|
import com.todoroo.astrid.service.MetadataService;
|
||||||
|
import com.todoroo.astrid.service.TagDataService;
|
||||||
|
import com.todoroo.astrid.utility.Constants;
|
||||||
|
|
||||||
|
public class Astrid44SyncMigrator {
|
||||||
|
|
||||||
|
@Autowired private MetadataService metadataService;
|
||||||
|
@Autowired private TagDataService tagDataService;
|
||||||
|
@Autowired private TagDataDao tagDataDao;
|
||||||
|
@Autowired private TaskDao taskDao;
|
||||||
|
@Autowired private UpdateDao updateDao;
|
||||||
|
|
||||||
|
private static final String PREF_MIGRATED_TASKS_TO_TAGS = "tasks_to_tags_migration"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
public Astrid44SyncMigrator() {
|
||||||
|
DependencyInjectionService.getInstance().inject(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("nls")
|
||||||
|
public void migrateTagMetadataToTable() {
|
||||||
|
if (Preferences.getBoolean(PREF_MIGRATED_TASKS_TO_TAGS, false))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// --------------
|
||||||
|
// First assert that a TagData object exists for each tag metadata
|
||||||
|
// --------------
|
||||||
|
Query noTagDataQuery = Query.select(Metadata.PROPERTIES).where(Criterion.and(
|
||||||
|
MetadataCriteria.withKey(TagService.KEY),
|
||||||
|
Criterion.not(TagService.TAG.in(Query.select(TagData.NAME).from(TagData.TABLE))))).groupBy(TagService.TAG);
|
||||||
|
|
||||||
|
TodorooCursor<Metadata> noTagData = metadataService.query(noTagDataQuery);
|
||||||
|
try {
|
||||||
|
Metadata tag = new Metadata();
|
||||||
|
for (noTagData.moveToFirst(); !noTagData.isAfterLast(); noTagData.moveToNext()) {
|
||||||
|
tag.readFromCursor(noTagData);
|
||||||
|
|
||||||
|
if (Constants.DEBUG)
|
||||||
|
Log.w("tag-link-migrate", "CREATING TAG DATA " + tag.getValue(TagService.TAG));
|
||||||
|
|
||||||
|
TagData newTagData = new TagData();
|
||||||
|
newTagData.setValue(TagData.NAME, tag.getValue(TagService.TAG));
|
||||||
|
tagDataService.save(newTagData);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
noTagData.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------
|
||||||
|
// Then assert that every remote model has a remote id, by generating one using the uuid generator for all those without one
|
||||||
|
// --------------
|
||||||
|
Query tagsWithoutUUIDQuery = Query.select(TagData.ID, TagData.REMOTE_ID).where(Criterion.or(TagData.REMOTE_ID.isNull(), TagData.REMOTE_ID.eq(0)));
|
||||||
|
assertUUIDsExist(tagsWithoutUUIDQuery, new TagData(), tagDataDao);
|
||||||
|
|
||||||
|
Query tasksWithoutUUIDQuery = Query.select(Task.ID, Task.REMOTE_ID).where(Criterion.or(Task.REMOTE_ID.isNull(), Task.REMOTE_ID.eq(0)));
|
||||||
|
assertUUIDsExist(tasksWithoutUUIDQuery, new Task(), taskDao);
|
||||||
|
|
||||||
|
Query updatesWithoutUUIDQuery = Query.select(Update.ID, Update.REMOTE_ID).where(Criterion.or(Update.REMOTE_ID.isNull(), Update.REMOTE_ID.eq(0)));
|
||||||
|
assertUUIDsExist(updatesWithoutUUIDQuery, new Update(), updateDao);
|
||||||
|
|
||||||
|
Preferences.setBoolean(PREF_MIGRATED_TASKS_TO_TAGS, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private <TYPE extends RemoteModel> void assertUUIDsExist(Query query, TYPE instance, DatabaseDao<TYPE> dao) {
|
||||||
|
TodorooCursor<TYPE> cursor = dao.query(query);
|
||||||
|
try {
|
||||||
|
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
|
||||||
|
instance.readPropertiesFromCursor(cursor);
|
||||||
|
Pair<Long, String> uuidPair = UUIDHelper.newUUID();
|
||||||
|
instance.setValue(RemoteModel.REMOTE_ID_PROPERTY, uuidPair.getLeft());
|
||||||
|
instance.setValue(RemoteModel.PROOF_TEXT_PROPERTY, uuidPair.getRight());
|
||||||
|
dao.saveExisting(instance);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
cursor.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,59 +0,0 @@
|
|||||||
package com.todoroo.astrid.tags;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.todoroo.andlib.data.TodorooCursor;
|
|
||||||
import com.todoroo.andlib.service.Autowired;
|
|
||||||
import com.todoroo.andlib.service.DependencyInjectionService;
|
|
||||||
import com.todoroo.andlib.sql.Criterion;
|
|
||||||
import com.todoroo.andlib.sql.Query;
|
|
||||||
import com.todoroo.andlib.utility.Preferences;
|
|
||||||
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
|
|
||||||
import com.todoroo.astrid.data.Metadata;
|
|
||||||
import com.todoroo.astrid.data.TagData;
|
|
||||||
import com.todoroo.astrid.service.MetadataService;
|
|
||||||
import com.todoroo.astrid.service.TagDataService;
|
|
||||||
import com.todoroo.astrid.utility.Constants;
|
|
||||||
|
|
||||||
public class TagsTableMigrator {
|
|
||||||
|
|
||||||
@Autowired private MetadataService metadataService;
|
|
||||||
@Autowired private TagDataService tagDataService;
|
|
||||||
|
|
||||||
private static final String PREF_MIGRATED_TASKS_TO_TAGS = "tasks_to_tags_migration"; //$NON-NLS-1$
|
|
||||||
|
|
||||||
public TagsTableMigrator() {
|
|
||||||
DependencyInjectionService.getInstance().inject(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("nls")
|
|
||||||
public void migrateTagMetadataToTable() {
|
|
||||||
if (Preferences.getBoolean(PREF_MIGRATED_TASKS_TO_TAGS, false))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// First assert that a TagData object exists for each tag metadata
|
|
||||||
Query noTagDataQuery = Query.select(Metadata.PROPERTIES).where(Criterion.and(
|
|
||||||
MetadataCriteria.withKey(TagService.KEY),
|
|
||||||
Criterion.not(TagService.TAG.in(Query.select(TagData.NAME).from(TagData.TABLE))))).groupBy(TagService.TAG);
|
|
||||||
|
|
||||||
TodorooCursor<Metadata> noTagData = metadataService.query(noTagDataQuery);
|
|
||||||
try {
|
|
||||||
Metadata tag = new Metadata();
|
|
||||||
for (noTagData.moveToFirst(); !noTagData.isAfterLast(); noTagData.moveToNext()) {
|
|
||||||
tag.readFromCursor(noTagData);
|
|
||||||
|
|
||||||
if (Constants.DEBUG)
|
|
||||||
Log.w("tag-link-migrate", "CREATING TAG DATA " + tag.getValue(TagService.TAG));
|
|
||||||
|
|
||||||
TagData newTagData = new TagData();
|
|
||||||
newTagData.setValue(TagData.NAME, tag.getValue(TagService.TAG));
|
|
||||||
tagDataService.save(newTagData);
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
noTagData.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
Preferences.setBoolean(PREF_MIGRATED_TASKS_TO_TAGS, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue