我已经为ZK Tree组件实现了新的模型类。
public class AiTreeModel<E> extends DefaultTreeModel<E> implements Serializable {
private static final long serialVersionUID = 20160122L;
private void processChildNodes(TreeNode<E> node, boolean selected, IAttributeProcessor leafProcessor) {
if (selected) {
addToSelection(node);
} else {
removeFromSelection(node);
}
if (node.isLeaf()) {
leafProcessor.process(node, selected);
} else {
node.getChildren().forEach(child -> processChildNodes(child, selected, leafProcessor));
}
}
private boolean isSomeChildSelected(TreeNode<E> node) {
if (node.isLeaf()) {
return isSelected(node);
} else {
return node.getChildren().stream().anyMatch(this::isSomeChildSelected);
}
}
private void checkParentNodes(final TreeNode<E> node, boolean selected) {
TreeNode<E> parent = node.getParent();
while (parent != null) {
if (selected) {
addToSelection(parent);
} else {
if (!isSomeChildSelected(parent)) {
removeFromSelection(parent);
}
}
parent = parent.getParent();
}
}
public void processNode(TreeNode<E> node, boolean selected, IAttributeProcessor leafProcessor) {
processChildNodes(node, selected, leafProcessor);
checkParentNodes(node, selected);
}
public AiTreeModel(TreeNode<E> root) {
super(root);
}
}
在这个模型中,很少有方法可以控制父母的选择。
在课外我只使用一种公共方法processNode
。
我想编写简单的Groovy JUnit测试,它将检查此模型。例如:
def "Test parent selection"() {
setup:
def AiTreeModel<?> model = new AiTreeModel<>(helper.getTreeByDate(new Date()));
when:
TreeNode<?> root = model.getRoot();
def node = root.getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0);
model.processNode(node, true, this);
then:
model.getSelection().size() == 3
}
在运行时选择正常并且所有父节点都添加。但在测试中,父节点重写在Selection
模型图中。
我做错了什么? 这种测试方法是否正确?
感谢您的回答和最好的问候。
答案 0 :(得分:0)
我发现了问题。这是因为树处于单选模式。
model.setMultiple(true);
并且一切正常。
感谢您浪费时间。