From e86f1a768163b81d5fa227d94e8ef6255f3311d7 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Mon, 4 Mar 2013 10:56:04 -0800 Subject: [PATCH] Rewrote TagService.rename to use uuids --- .../astrid/actfm/TagSettingsActivity.java | 4 +- .../todoroo/astrid/tags/TagCaseMigrator.java | 38 +++++++++++++++- .../todoroo/astrid/tags/TagFilterExposer.java | 5 --- .../com/todoroo/astrid/tags/TagService.java | 45 +++---------------- .../astrid/service/TagDataService.java | 2 +- 5 files changed, 47 insertions(+), 47 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java index e70224378..4a4672073 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java @@ -274,13 +274,13 @@ public class TagSettingsActivity extends FragmentActivity { if (nameChanged) { if (oldName.equalsIgnoreCase(newName)) { // Change the capitalization of a list manually tagData.setValue(TagData.NAME, newName); - service.renameCaseSensitive(oldName, newName); + service.rename(tagData.getUuid(), newName); } else { // Rename list--check for existing name newName = service.getTagWithCase(newName); tagName.setText(newName); if (!newName.equals(oldName)) { tagData.setValue(TagData.NAME, newName); - service.rename(oldName, newName); + service.rename(tagData.getUuid(), newName); } else { nameChanged = false; } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagCaseMigrator.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagCaseMigrator.java index b31369863..7e852cd8c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagCaseMigrator.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagCaseMigrator.java @@ -13,6 +13,7 @@ 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.Field; import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.Preferences; @@ -23,6 +24,7 @@ import com.todoroo.astrid.data.Task; import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.service.TaskService; +import com.todoroo.astrid.utility.Flags; public class TagCaseMigrator { @@ -59,7 +61,7 @@ public class TagCaseMigrator { } for (String key : renameMap.keySet()) { - TagService.getInstance().renameCaseSensitive(key, renameMap.get(key)); + renameCaseSensitive(key, renameMap.get(key)); updateTagData(key); } @@ -138,6 +140,40 @@ public class TagCaseMigrator { } finally { tasks.close(); } + } + + @Deprecated + private int renameCaseSensitive(String oldTag, String newTag) { // Need this for tag case migration process + return renameHelper(oldTag, newTag, true); + } + + @Deprecated + private int renameHelper(String oldTag, String newTag, boolean caseSensitive) { + // First remove newTag from all tasks that have both oldTag and newTag. + metadataService.deleteWhere( + Criterion.and( + Metadata.VALUE1.eq(newTag), + Metadata.TASK.in(rowsWithTag(oldTag, Metadata.TASK)))); + + // Then rename all instances of oldTag to newTag. + Metadata metadata = new Metadata(); + metadata.setValue(TaskToTagMetadata.TAG_NAME, newTag); + int ret; + if (caseSensitive) + ret = metadataService.update(tagEq(oldTag, Criterion.all), metadata); + else + ret = metadataService.update(TagService.tagEqIgnoreCase(oldTag, Criterion.all), metadata); + invalidateTaskCache(newTag); + return ret; + } + + + private Query rowsWithTag(String tag, Field... projections) { + return Query.select(projections).from(Metadata.TABLE).where(Metadata.VALUE1.eq(tag)); + } + private void invalidateTaskCache(String tag) { + taskService.clearDetails(Task.ID.in(rowsWithTag(tag, Task.ID))); + Flags.set(Flags.REFRESH); } } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java index b77f0e09a..6a416ce64 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java @@ -311,11 +311,6 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE return false; } else { int renamed = tagService.rename(tag, text); - TagData tagData = tagDataDao.fetch(uuid, TagData.ID, TagData.NAME); - if (tagData != null) { - tagData.setValue(TagData.NAME, text); - tagDataDao.saveExisting(tagData); - } Toast.makeText(this, getString(R.string.TEA_tags_renamed, tag, text, renamed), Toast.LENGTH_SHORT).show(); return true; diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java index 9948869de..4cfbb837a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java @@ -47,7 +47,6 @@ import com.todoroo.astrid.data.TaskApiDao; import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.service.TaskService; -import com.todoroo.astrid.utility.Flags; /** * Provides operations for working with tags @@ -191,7 +190,6 @@ public final class TagService { * @param activeStatus criterion for specifying completed or uncompleted * @return empty array if no tags, otherwise array */ - @Deprecated public Tag[] getGroupedTags(Order order, Criterion activeStatus) { Criterion criterion = Criterion.and(activeStatus, MetadataCriteria.withKey(TaskToTagMetadata.KEY)); Query query = Query.select(TaskToTagMetadata.TAG_NAME, TaskToTagMetadata.TAG_UUID, COUNT). @@ -541,43 +539,14 @@ public final class TagService { return metadataDao.update(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_UUID.eq(uuid)), deleted); } - public int rename(String oldTag, String newTag) { - return renameHelper(oldTag, newTag, false); - } - - public int renameCaseSensitive(String oldTag, String newTag) { // Need this for tag case migration process - return renameHelper(oldTag, newTag, true); - } - - @Deprecated - private int renameHelper(String oldTag, String newTag, boolean caseSensitive) { - // First remove newTag from all tasks that have both oldTag and newTag. - MetadataService metadataService = PluginServices.getMetadataService(); - metadataService.deleteWhere( - Criterion.and( - Metadata.VALUE1.eq(newTag), - Metadata.TASK.in(rowsWithTag(oldTag, Metadata.TASK)))); - - // Then rename all instances of oldTag to newTag. - Metadata metadata = new Metadata(); - metadata.setValue(TaskToTagMetadata.TAG_NAME, newTag); - int ret; - if (caseSensitive) - ret = metadataService.update(tagEq(oldTag, Criterion.all), metadata); - else - ret = metadataService.update(tagEqIgnoreCase(oldTag, Criterion.all), metadata); - invalidateTaskCache(newTag); - return ret; - } - - - private Query rowsWithTag(String tag, Field... projections) { - return Query.select(projections).from(Metadata.TABLE).where(Metadata.VALUE1.eq(tag)); - } + public int rename(String uuid, String newName) { + TagData template = new TagData(); + template.setValue(TagData.NAME, newName); + tagDataDao.update(TagData.UUID.eq(uuid), template); - private void invalidateTaskCache(String tag) { - taskService.clearDetails(Task.ID.in(rowsWithTag(tag, Task.ID))); - Flags.set(Flags.REFRESH); + Metadata metadataTemplate = new Metadata(); + metadataTemplate.setValue(TaskToTagMetadata.TAG_NAME, newName); + return metadataDao.update(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_UUID.eq(uuid)), metadataTemplate); } public static int getDefaultImageIDForTag(String nameOrUUID) { diff --git a/astrid/src/com/todoroo/astrid/service/TagDataService.java b/astrid/src/com/todoroo/astrid/service/TagDataService.java index 79e7b0fda..e8aef80bc 100644 --- a/astrid/src/com/todoroo/astrid/service/TagDataService.java +++ b/astrid/src/com/todoroo/astrid/service/TagDataService.java @@ -197,7 +197,7 @@ public class TagDataService { if (!cursor.isAfterLast()) { tagData.readFromCursor(cursor); if(!tagData.getValue(TagData.NAME).equals(featObject.getString("name"))) - TagService.getInstance().rename(tagData.getValue(TagData.NAME), featObject.getString("name")); + TagService.getInstance().rename(tagData.getUuid(), featObject.getString("name")); cursor.moveToNext(); } ActFmSyncService.JsonHelper.featuredListFromJson(featObject, tagData);