add a single-level list traversal of the tree

This commit is contained in:
Zlatin Balevsky
2019-12-06 12:47:08 +00:00
parent bc628b9c00
commit a6e0834722
3 changed files with 70 additions and 0 deletions

View File

@ -0,0 +1,10 @@
package com.muwire.core.files;
import java.io.File;
public interface FileListCallback<T> {
public void onFile(File f, T value);
public void onDirectory(File f);
}

View File

@ -71,6 +71,21 @@ class FileTree<T> {
callback.onDirectoryLeave()
}
synchronized void list(File parent, FileListCallback<T> callback) {
TreeNode<T> node
if (parent == null)
node = root
else
node = fileToNode.get(parent)
node.children.each {
if (it.file.isFile())
callback.onFile(it.file, it.value)
else
callback.onDirectory(it.file)
}
}
public static class TreeNode<T> {
TreeNode parent
File file

View File

@ -89,4 +89,49 @@ class FileTreeTest {
assert values.contains("c")
assert values.contains("e")
}
@Test
public void testList() {
Set<File> directories = new HashSet<>()
Set<String> values = new HashSet<>()
def cb = new FileListCallback<String>() {
@Override
public void onDirectory(File file) {
directories.add(file)
}
@Override
public void onFile(File file, String value) {
values.add(value)
}
}
File a = new File("a")
a.createNewFile()
File b = new File("b")
b.mkdir()
File c = new File(b, "c")
c.createNewFile()
FileTree<String> tree = new FileTree<>()
tree.add(a, "a")
tree.add(b, "b")
tree.add(c, "c")
tree.list(null, cb)
assert directories.size() == 1
assert directories.contains(b)
assert values.size() == 1
assert values.contains("a")
directories.clear()
values.clear()
tree.list(b, cb)
assert directories.isEmpty()
assert values.size() == 1
assert values.contains("c")
}
}