Implemented a more concise serialization scheme for subtasks

pull/14/head
Sam Bosley 12 years ago
parent 49fad99bd2
commit 0ad805648f

@ -6,7 +6,6 @@ import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
@ -316,21 +315,20 @@ public abstract class AstridOrderedListUpdater<LIST> {
}
private void recursivelyBuildChildren(Node node, JSONArray children) throws JSONException {
for (int i = 0; i < children.length(); i++) {
JSONObject childObj = children.getJSONObject(i);
JSONArray keys = childObj.names();
if (keys == null)
continue;
Long id = keys.getLong(0);
if (id <= 0)
continue;
JSONArray childsChildren = childObj.getJSONArray(Long.toString(id));
Node child = new Node(id, node, node.indent + 1);
recursivelyBuildChildren(child, childsChildren);
node.children.add(child);
idToNode.put(id, child);
for (int i = 1; i < children.length(); i++) {
JSONArray subarray = children.optJSONArray(i);
if (subarray == null) {
Long id = children.getLong(i);
Node child = new Node(id, node, node.indent + 1);
node.children.add(child);
idToNode.put(id, child);
} else {
Long id = subarray.getLong(0);
Node child = new Node(id, node, node.indent + 1);
recursivelyBuildChildren(child, subarray);
node.children.add(child);
idToNode.put(id, child);
}
}
}
@ -341,21 +339,25 @@ public abstract class AstridOrderedListUpdater<LIST> {
}
try {
recursivelySerializeChildren(treeRoot, tree);
tree.put(-1L);
recursivelySerialize(treeRoot, tree);
} catch (JSONException e) {
Log.e("OrderedListUpdater", "Error serializing tree model", e); //$NON-NLS-1$//$NON-NLS-2$
}
return tree.toString();
}
public static void recursivelySerializeChildren(Node node, JSONArray serializeTo) throws JSONException {
public static void recursivelySerialize(Node node, JSONArray serializeTo) throws JSONException {
ArrayList<Node> children = node.children;
serializeTo.put(node.taskId);
for (Node child : children) {
JSONObject childObj = new JSONObject();
JSONArray childsChildren = new JSONArray();
recursivelySerializeChildren(child, childsChildren);
childObj.put(Long.toString(child.taskId), childsChildren);
serializeTo.put(childObj);
if (child.children.size() > 0) {
JSONArray branch = new JSONArray();
recursivelySerialize(child, branch);
serializeTo.put(branch);
} else {
serializeTo.put(child.taskId);
}
}
}
}

@ -102,7 +102,7 @@ public class SubtasksMetadataMigration {
try {
JSONArray array = new JSONArray();
AstridOrderedListUpdater.recursivelySerializeChildren(root, array);
AstridOrderedListUpdater.recursivelySerialize(root, array);
return array.toString();
} catch (JSONException e) {
return "[]"; //$NON-NLS-1$

@ -95,8 +95,8 @@ public class SubtasksMigrationTest extends SubtasksTestCase {
* A
*/
private static final String ACTIVE_TASKS_TREE = "[{\"1\":[{\"2\":[]}]}, {\"3\":[{\"4\":[{\"5\":[]}]}, {\"6\":[]}]}]".replaceAll("\\s", "");
private static final String TAG_DATA_TREE = "[{\"6\":[]}, {\"5\":[{\"2\":[]}, {\"4\":[{\"3\":[]}]}]}, {\"1\":[]}]".replaceAll("\\s", "");
private static final String ACTIVE_TASKS_TREE = "[-1, [1, 2], [3, [4, 5], 6]]".replaceAll("\\s", "");
private static final String TAG_DATA_TREE = "[-1, 6, [5, 2, [4,3]], 1]".replaceAll("\\s", "");
private void createAdvancedMetadata(TagData tagData) {
createSubtasksMetadata(tagData, 6, 1, 0);

@ -26,8 +26,8 @@ public class SubtasksTestCase extends DatabaseTestCase {
* E
* F
*/
public static final String DEFAULT_SERIALIZED_TREE =
"[{\"1\":[{\"2\":[]}, {\"3\":[{\"4\":[]}]}]}, {\"5\":[]}, {\"6\":[]}]".replaceAll("\\s", "");
public static final String DEFAULT_SERIALIZED_TREE = "[-1, [1, 2, [3, 4]], 5, 6]".replaceAll("\\s", "");
//"[{\"1\":[{\"2\":[]}, {\"3\":[{\"4\":[]}]}]}, {\"5\":[]}, {\"6\":[]}]".replaceAll("\\s", "");
@Override
protected void setUp() throws Exception {

@ -7,6 +7,7 @@ package com.todoroo.astrid.test;
import java.io.File;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.test.TodorooTestCaseWithInjector;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.legacy.AlarmDatabase;
@ -38,6 +39,7 @@ public class DatabaseTestCase extends TodorooTestCaseWithInjector {
super.setUp();
// empty out test databases
assertNotNull(ContextManager.getContext());
database.clear();
database.openForWriting();

Loading…
Cancel
Save