package org.zkoss.zktest.bind.parser; import java.util.AbstractCollection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.zkoss.bind.Binder; import org.zkoss.bind.annotation.AfterCompose; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.ContextParam; import org.zkoss.bind.annotation.ContextType; import org.zkoss.bind.annotation.DependsOn; import org.zkoss.bind.annotation.Init; import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.select.Selectors; import org.zkoss.zk.ui.select.annotation.Listen; import org.zkoss.zk.ui.select.annotation.Wire; import org.zkoss.zktest.bind.basic.ChildrenSimpleVM; import org.zkoss.zktest.bind.basic.ChildrenSimpleVM.Node; import org.zkoss.zul.Window; public class F80_Parser_StoreSubAnnotCntVM { @Wire("#w1") private Window w1; @Wire("#w2") private Window w2; private String label1 = "test1"; private String label2 = "test2"; private String label3 = "test3"; public String getLabel1() { return label1; } public String getLabel2() { return label2; } public String getLabel3() { return label3; } @AfterCompose public void afterCompose(@ContextParam(ContextType.VIEW) Component view) { Selectors.wireComponents(view, this, false); } @Command @NotifyChange("label1") public void func1() { label1 += "<f1>"; } @Command public void detach_attach() { w2.detach(); w1.appendChild(w2); } @Command @NotifyChange("label2") public void func2() { label2 += "<f2>"; } @Command @NotifyChange("label3") public void func3() { label3 += "<f3>"; } @Init public void init() { nodes = new ArrayList<Node>(); nodes.add(createNode("Item A",0,0)); nodes.add(createNode("Item B",3,1)); nodes.add(createNode("Item C",2,2)); } List<Node> nodes; public List<Node> getNodes(){ return nodes; } @DependsOn("nodes") public Collection<Node> getNodes2() { return new AbstractCollection<F80_Parser_StoreSubAnnotCntVM.Node>() { public Iterator<Node> iterator() { return nodes.iterator(); } public int size() { return nodes.size(); } }; } Node createNode(String name,int children,int nested) { Node n = new Node(name); if(nested>0){ for (int i = 0; i < children; i++) { n.addChild(createNode(name + "_" + i, children, nested - 1)); } } return n; } static public class Node { List<Node> children; String name; public Node(String name) { this.name = name; children = new ArrayList<Node>(); } public void addChild(Node node) { children.add(node); } public List<Node> getChildren() { return children; } public String getName() { return name; } } }