mirror of https://github.com/zlatinb/muwire
add a single-level list traversal of the tree
parent
bc628b9c00
commit
a6e0834722
|
@ -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);
|
||||||
|
}
|
|
@ -71,6 +71,21 @@ class FileTree<T> {
|
||||||
callback.onDirectoryLeave()
|
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> {
|
public static class TreeNode<T> {
|
||||||
TreeNode parent
|
TreeNode parent
|
||||||
File file
|
File file
|
||||||
|
|
|
@ -89,4 +89,49 @@ class FileTreeTest {
|
||||||
assert values.contains("c")
|
assert values.contains("c")
|
||||||
assert values.contains("e")
|
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")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue