/** * Gathers all field paths in a sub-tree. */ private void getFieldPaths(Node node, String path, List<String> paths) { if (node.children.isEmpty()) { paths.add(path); return; } for (Entry<String, Node> entry : node.children.entrySet()) { String childPath = path.isEmpty() ? entry.getKey() : path + "." + entry.getKey(); getFieldPaths(entry.getValue(), childPath, paths); } }
getFieldPaths(node, path, paths); for (String value : paths) { output.addFieldPath(value);
/** * Converts this tree to a FieldMask. */ FieldMask toFieldMask() { if (root.children.isEmpty()) { return FieldMask.getDefaultInstance(); } List<String> paths = new ArrayList<String>(); getFieldPaths(root, "", paths); return FieldMask.newBuilder().addAllPaths(paths).build(); }