Improvements to make changes, first draft at scheme for non-column changes (like has_due_time)

pull/14/head
Sam Bosley 13 years ago
parent a3866b2270
commit d50490ebfe

@ -20,6 +20,7 @@ import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.dao.RemoteModelDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task;
@SuppressWarnings("nls")
public class MakeChanges<TYPE extends RemoteModel> extends ServerToClientMessage {
@ -53,8 +54,11 @@ public class MakeChanges<TYPE extends RemoteModel> extends ServerToClientMessage
}
}
nonColumnChanges(changes, model);
StringProperty uuidProperty = (StringProperty) NameMaps.serverColumnNameToLocalProperty(table, "uuid");
model.setValue(uuidProperty, uuid);
if (!model.getSetValues().containsKey(uuidProperty.name))
model.setValue(uuidProperty, uuid);
if (model.getSetValues().size() > 0) {
model.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
@ -86,6 +90,62 @@ public class MakeChanges<TYPE extends RemoteModel> extends ServerToClientMessage
}
}
private void nonColumnChanges(JSONObject changes, TYPE model) {
MakeNonColumnChanges nonColumnChanges = null;
if (NameMaps.TABLE_ID_TASKS.equals(table))
nonColumnChanges = new MakeNonColumnTaskChanges(model, changes);
else if (NameMaps.TABLE_ID_TAGS.equals(table))
nonColumnChanges = new MakeNonColumnTagChanges(model, changes);
if (nonColumnChanges != null)
nonColumnChanges.performChanges();
}
private abstract class MakeNonColumnChanges {
protected final TYPE model;
protected final JSONObject changes;
public MakeNonColumnChanges(TYPE model, JSONObject changes) {
this.model = model;
this.changes = changes;
}
public abstract void performChanges();
}
private class MakeNonColumnTaskChanges extends MakeNonColumnChanges {
public MakeNonColumnTaskChanges(TYPE model, JSONObject changes) {
super(model, changes);
}
@Override
public void performChanges() {
try {
if (changes.has("has_due_time")) {
int urgency = changes.getBoolean("has_due_time") ? Task.URGENCY_SPECIFIC_DAY_TIME : Task.URGENCY_SPECIFIC_DAY;
model.setValue(Task.DUE_DATE, Task.createDueDate(urgency, model.getValue(Task.DUE_DATE)));
}
} catch (JSONException e) {
Log.e(ERROR_TAG, "Error processing non-column properties", e);
}
}
}
private class MakeNonColumnTagChanges extends MakeNonColumnChanges {
public MakeNonColumnTagChanges(TYPE model, JSONObject changes) {
super(model, changes);
}
@Override
public void performChanges() {
// Perform any non-field based changes
}
}
private static class JSONChangeToPropertyVisitor implements PropertyVisitor<Void, String> {

Loading…
Cancel
Save