package org.zkoss.zktest.bind.basic; import java.util.LinkedList; import java.util.List; import java.util.Random; import org.zkoss.bind.annotation.BindingParam; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Default; import org.zkoss.bind.annotation.DependsOn; import org.zkoss.bind.annotation.GlobalCommand; import org.zkoss.bind.annotation.Init; import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.bind.annotation.QueryParam; public class Modulize { List<Module> modules = new LinkedList<Module>(); boolean amount_set = false; int amount; Module selected; static Random r = new Random(System.currentTimeMillis()); int newCount = 0; @Init public void init(@QueryParam("ms") @Default("1") int moduleSize) { for (int i = 0; i < moduleSize; i++) { modules.add(new Module1("Default " + i,r.nextInt(100))); } if(modules.size()>0){ selected = modules.get(0); } } public List<Module> getModules() { return modules; } public Module getSelected(){ return selected; } @DependsOn({"modules"}) public int getModulesAmount() { if(amount_set){ return amount; } amount = 0; for (Module m : modules) { amount += m.getAmount(); } amount_set = true; return amount; } @Command @NotifyChange("selected") public void selectModule(@BindingParam("module") Module module){ selected = module; } @Command @NotifyChange({"modules","selected"}) public void removeModule(@BindingParam("module") Module module){ modules.remove(module); if(selected == module){ if(modules.size()>0){ selected = modules.get(0); }else{ selected = null; } } amount_set = false; } @Command @NotifyChange({"modules","selected"}) public void addModule(@BindingParam("type") @Default("1") int type){ Module m = null; switch(type){ case 2: m = new Module2("Type2 "+newCount++,r.nextInt(10),r.nextInt(10)); break; default: m = new Module1("Type1 "+newCount++,r.nextInt(100)); } modules.add(selected = m); amount_set = false; } @GlobalCommand @NotifyChange("modulesAmount") public void updateAmount(){ amount_set = false; } }