package org.zkoss.zktest.test2;
import java.util.Iterator;
import java.util.Random;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.DefaultTreeModel;
import org.zkoss.zul.DefaultTreeNode;
import org.zkoss.zul.Tabbox;
import org.zkoss.zul.Tree;
import org.zkoss.zul.TreeNode;
import org.zkoss.zul.Treecell;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.TreeitemRenderer;
import org.zkoss.zul.Treerow;
public class B65_ZK_1726_Composer extends GenericForwardComposer<Tabbox> {
private static final long serialVersionUID = 8214580190889099905L;
private Tabbox myTab;
private Tree myTreeA;
private DefaultTreeModel<TestObject> mymodelA;
public void doAfterCompose(Tabbox comp) throws Exception {
super.doAfterCompose(comp);
mymodelA = new DefaultTreeModel<TestObject>(new DefaultTreeNode<TestObject>(null, new DefaultTreeNode[] {}));
fillTree(myTreeA, mymodelA, "A");
}
private void fillTree(Tree myTree, DefaultTreeModel<TestObject> mymodel, String treeName) {
myTree.setItemRenderer(new TreeRendererTest());
myTree.setModel(mymodel);
DefaultTreeNode<TestObject> rootNode = (DefaultTreeNode<TestObject>) mymodel.getRoot();
for (int i = 0; i < 10; i++) {
TestObject test = new TestObject();
test.col0 = "Row " + treeName + " " + i;
test.col1 = "0";
TestObject test1 = new TestObject();
test1.col0 = "SubRow " + treeName + " " + i + " X";
test1.col1 = "0";
TestObject test2 = new TestObject();
test2.col0 = "SubRow " + treeName + " " + i + " Y";
test2.col1 = "0";
rootNode.add(new DefaultTreeNode<TestObject>(test, new DefaultTreeNode[] {new DefaultTreeNode(test1), new DefaultTreeNode(test2)}));
}
}
public void onCol1(Event event) {
updateCol(event, 1);
}
public void updateCol(Event event, int col) {
DefaultTreeNode<TestObject> rootNode;
String id = (String) event.getData();
if (id.startsWith("Row A") || id.startsWith("SubRow A")) {
rootNode = (DefaultTreeNode<TestObject>) mymodelA.getRoot();
} else {
System.out.println("ERROR id=" + id);
return;
}
Iterator<TreeNode<TestObject>> it = rootNode.getChildren().iterator();
TestObject row;
DefaultTreeNode<TestObject> node;
while (it.hasNext()) {
node = (DefaultTreeNode<TestObject>) it.next();
row = (TestObject) node.getData();
if (row.col0.equals(id)) {
if (col == 1) {
row.col1 = "" + newRandomInt();
}
node.setData(row);
break;
} else if (id.startsWith("Sub" + row.col0)) {
DefaultTreeNode<TestObject> nodeSub;
TestObject rowSub;
for (int index = 0; index < node.getChildCount(); index++) {
nodeSub = (DefaultTreeNode<TestObject>) node.getChildAt(index);
rowSub = (TestObject) nodeSub.getData();
if (rowSub.col0.equals(id)) {
if (col == 1) {
rowSub.col1 = "" + newRandomInt();
}
}
nodeSub.setData(rowSub);
}
}
}
}
private int newRandomInt() {
Random randomGenerator = new Random();
return randomGenerator.nextInt(100);
}
class TreeRendererTest implements TreeitemRenderer<DefaultTreeNode<TestObject>> {
public void render(Treeitem treeItem, DefaultTreeNode<TestObject> treeNode, int id) throws Exception {
treeItem.setValue(treeNode);
Treerow tr;
if (treeItem.getTreerow() == null) {
tr = new Treerow();
tr.setParent(treeItem);
} else {
tr = treeItem.getTreerow();
tr.getChildren().clear();
}
TestObject row = (TestObject) treeNode.getData();
final Treecell t1 = new Treecell();
t1.setLabel(row.col0);
tr.appendChild(t1);
Treecell t2 = new Treecell();
t2.setLabel(row.col1);
if (!t2.isListenerAvailable(Events.ON_CLICK, true)) {
t2.addEventListener(Events.ON_CLICK, new EventListener<Event>() {
public void onEvent(Event event) throws Exception {
Events.postEvent(new Event("onCol1", myTab, t1.getLabel()));
}
});
}
tr.appendChild(t2);
}
}
class TestObject {
public String col0, col1;
}
}