From d044095d023856625532dcde4fb447a9b18b5812 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 20 Feb 2013 10:52:55 -0800 Subject: [PATCH] Added ability to specify save match criterion beyond just matching on uuid in MakeChanges --- .../astrid/actfm/sync/messages/MakeChanges.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/MakeChanges.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/MakeChanges.java index a8c256103..e350e8d74 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/MakeChanges.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/MakeChanges.java @@ -64,13 +64,16 @@ public class MakeChanges extends ServerToClientMessage return model; } - public static void saveOrUpdateModelAfterChanges(RemoteModelDao dao, T model, String oldUuid, String uuid) { + private static void saveOrUpdateModelAfterChanges(RemoteModelDao dao, T model, String oldUuid, String uuid, Criterion orCriterion) { Criterion uuidCriterion; if (oldUuid == null) uuidCriterion = RemoteModel.UUID_PROPERTY.eq(uuid); else uuidCriterion = RemoteModel.UUID_PROPERTY.eq(oldUuid); + if (orCriterion != null) + uuidCriterion = Criterion.or(uuidCriterion, orCriterion); + if (model.getSetValues() != null && model.getSetValues().size() > 0) { model.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); if (dao.update(uuidCriterion, model) <= 0) { // If update doesn't update rows. create a new model @@ -101,7 +104,7 @@ public class MakeChanges extends ServerToClientMessage if (model.getSetValues() != null && !model.getSetValues().containsKey(uuidProperty.name)) model.setValue(uuidProperty, uuid); - saveOrUpdateModelAfterChanges(dao, model, oldUuid, uuid); + saveOrUpdateModelAfterChanges(dao, model, oldUuid, uuid, getMatchCriterion(model)); afterSaveChanges(changes, model, uuid, oldUuid); } catch (IllegalAccessException e) { @@ -113,6 +116,13 @@ public class MakeChanges extends ServerToClientMessage } } + private Criterion getMatchCriterion(TYPE model) { + if (NameMaps.TABLE_ID_TASK_LIST_METADATA.equals(table) && model.getSetValues().containsKey(TaskListMetadata.FILTER.name)) { + return TaskListMetadata.FILTER.eq(model.getSetValues().getAsString(TaskListMetadata.FILTER.name)); + } + return null; + } + private void beforeSaveChanges(JSONObject changes, TYPE model, String uuid) { ChangeHooks beforeSaveChanges = null; if (NameMaps.TABLE_ID_TASKS.equals(table))