/** * If the provided record doesn't have correct parent information, update appropriate bookkeeping * to improve the situation. * * @param bmk */ private void handleParenting(BookmarkRecord bmk) { if (parentGuidToIDMap.containsKey(bmk.parentID)) { bmk.androidParentID = parentGuidToIDMap.get(bmk.parentID); // Might as well set a basic position from the downloaded children array. JSONArray children = parentToChildArray.get(bmk.parentID); if (children != null) { int index = children.indexOf(bmk.guid); if (index >= 0) { bmk.androidPosition = index; } } } else { bmk.androidParentID = parentGuidToIDMap.get("unfiled"); ArrayList<String> children; if (missingParentToChildren.containsKey(bmk.parentID)) { children = missingParentToChildren.get(bmk.parentID); } else { children = new ArrayList<String>(); } children.add(bmk.guid); needsReparenting++; missingParentToChildren.put(bmk.parentID, children); } }
@Override protected void updateBookkeeping(Record record) throws NoGuidForIdException, NullCursorException, ParentNotFoundException { super.updateBookkeeping(record); BookmarkRecord bmk = (BookmarkRecord) record; // If record is folder, update maps and re-parent children if necessary. if (!bmk.isFolder()) { Logger.debug(LOG_TAG, "Not a folder. No bookkeeping."); return; } Logger.debug(LOG_TAG, "Updating bookkeeping for folder " + record.guid); // Mappings between ID and GUID. // TODO: update our persisted children arrays! // TODO: if our Android ID just changed, replace parents for all of our children. parentGuidToIDMap.put(bmk.guid, bmk.androidID); parentIDToGuidMap.put(bmk.androidID, bmk.guid); JSONArray childArray = bmk.children; if (Logger.logVerbose(LOG_TAG)) { Logger.trace(LOG_TAG, bmk.guid + " has children " + childArray.toJSONString()); } parentToChildArray.put(bmk.guid, childArray); // Re-parent. if (missingParentToChildren.containsKey(bmk.guid)) { for (String child : missingParentToChildren.get(bmk.guid)) { // This might return -1; that's OK, the bookmark will // be properly repositioned later. long position = childArray.indexOf(child); dataAccessor.updateParentAndPosition(child, bmk.androidID, position); needsReparenting--; } missingParentToChildren.remove(bmk.guid); } }