package com.revolsys.swing.tree.node;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import javax.swing.Icon;
import com.revolsys.swing.tree.BaseTreeNode;
public class FunctionChildrenTreeNode extends LazyLoadTreeNode {
private final Function<Object, Iterable<?>> factory;
public FunctionChildrenTreeNode(final Object userObject, final String name, final Icon icon,
final Function<Object, Iterable<?>> factory) {
super(userObject);
setName(name);
setIcon(icon);
this.factory = factory;
}
@Override
protected List<BaseTreeNode> loadChildrenDo() {
final Object userObject = getUserObject();
final List<BaseTreeNode> nodes = new ArrayList<>();
for (final Object child : this.factory.apply(userObject)) {
final BaseTreeNode node = BaseTreeNode.newTreeNode(child);
if (node != null) {
nodes.add(node);
}
}
return nodes;
}
}