From 538b38ef3730fe2dc0284e41078bfc4e2cca6045 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Mon, 21 Jan 2013 11:11:50 -0800 Subject: [PATCH] Support tag added and tag removed in make changes --- .../actfm/sync/messages/MakeChanges.java | 77 +++++++++++++------ 1 file changed, 52 insertions(+), 25 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 a735af88e..13d492930 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 @@ -55,21 +55,27 @@ public class MakeChanges extends ServerToClientMessage } } - nonColumnChanges(changes, model, uuid); + StringProperty uuidProperty = (StringProperty) NameMaps.serverColumnNameToLocalProperty(table, "uuid"); + if (model.getSetValues().containsKey(uuidProperty.name)) + uuid = model.getValue(uuidProperty); + + beforeSaveChanges(changes, model, uuid); LongProperty pushedAtProperty = (LongProperty) NameMaps.serverColumnNameToLocalProperty(table, "pushed_at"); if (pushedAtProperty != null && pushedAt > 0) model.setValue(pushedAtProperty, pushedAt); - StringProperty uuidProperty = (StringProperty) NameMaps.serverColumnNameToLocalProperty(table, "uuid"); if (!model.getSetValues().containsKey(uuidProperty.name)) model.setValue(uuidProperty, uuid); if (model.getSetValues().size() > 0) { model.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); + boolean success = true; if (dao.update(RemoteModel.UUID_PROPERTY.eq(uuid), model) <= 0) { // If update doesn't update rows. create a new model model.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); - dao.createNew(model); + success = dao.createNew(model); } + if (success) + afterSaveChanges(changes, model, uuid); } } catch (IllegalAccessException e) { @@ -99,23 +105,30 @@ public class MakeChanges extends ServerToClientMessage } } - private void nonColumnChanges(JSONObject changes, TYPE model, String uuid) { - MakeNonColumnChanges nonColumnChanges = null; + private void beforeSaveChanges(JSONObject changes, TYPE model, String uuid) { + ChangeHooks beforeSaveChanges = null; + if (NameMaps.TABLE_ID_TASKS.equals(table)) + beforeSaveChanges = new BeforeSaveTaskChanges(model, changes, uuid); + + if (beforeSaveChanges != null) + beforeSaveChanges.performChanges(); + } + + private void afterSaveChanges(JSONObject changes, TYPE model, String uuid) { + ChangeHooks afterSaveChanges = null; if (NameMaps.TABLE_ID_TASKS.equals(table)) - nonColumnChanges = new MakeNonColumnTaskChanges(model, changes, uuid); - else if (NameMaps.TABLE_ID_TAGS.equals(table)) - nonColumnChanges = new MakeNonColumnTagChanges(model, changes, uuid); + afterSaveChanges = new AfterSaveTaskChanges(model, changes, uuid); - if (nonColumnChanges != null) - nonColumnChanges.performChanges(); + if (afterSaveChanges != null) + afterSaveChanges.performChanges(); } - private abstract class MakeNonColumnChanges { + private abstract class ChangeHooks { protected final TYPE model; protected final JSONObject changes; protected final String uuid; - public MakeNonColumnChanges(TYPE model, JSONObject changes, String uuid) { + public ChangeHooks(TYPE model, JSONObject changes, String uuid) { this.model = model; this.changes = changes; this.uuid = uuid; @@ -124,14 +137,39 @@ public class MakeChanges extends ServerToClientMessage public abstract void performChanges(); } - private class MakeNonColumnTaskChanges extends MakeNonColumnChanges { + private class BeforeSaveTaskChanges extends ChangeHooks { + + public BeforeSaveTaskChanges(TYPE model, JSONObject changes, String uuid) { + super(model, changes, uuid); + } + + @Override + public void performChanges() { + // + } + } + + private class AfterSaveTaskChanges extends ChangeHooks { - public MakeNonColumnTaskChanges(TYPE model, JSONObject changes, String uuid) { + public AfterSaveTaskChanges(TYPE model, JSONObject changes, String uuid) { super(model, changes, uuid); } @Override public void performChanges() { + JSONArray addTags = changes.optJSONArray("tag_added"); + if (addTags != null) { + TagService tagService = TagService.getInstance(); + for (int i = 0; i < addTags.length(); i++) { + try { + String tagUuid = addTags.getString(i); + tagService.createLink(model.getId(), uuid, tagUuid); + } catch (JSONException e) { + // + } + } + } + JSONArray removeTags = changes.optJSONArray("tag_removed"); if (removeTags != null) { ArrayList toRemove = new ArrayList(removeTags.length()); @@ -146,18 +184,7 @@ public class MakeChanges extends ServerToClientMessage TagService.getInstance().deleteLinks(uuid, toRemove.toArray(new String[toRemove.size()])); } } - } - private class MakeNonColumnTagChanges extends MakeNonColumnChanges { - - public MakeNonColumnTagChanges(TYPE model, JSONObject changes, String uuid) { - super(model, changes, uuid); - } - - @Override - public void performChanges() { - // Perform any non-field based changes - } }