/** FormProxyDirtyVM.java. Purpose: Description: History: 4:19:37 PM Mar 12, 2015, Created by jameschu Copyright (C) 2015 Potix Corporation. All Rights Reserved. */ package org.zkoss.zktest.bind.viewmodel.form; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import org.zkoss.bind.BindUtils; import org.zkoss.bind.Form; import org.zkoss.bind.annotation.BindingParam; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Init; import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.bind.annotation.SmartNotifyChange; import org.zkoss.zktest.bind.viewmodel.bean.Book; import org.zkoss.zktest.bind.viewmodel.bean.Category; /** * @author jameschu * */ public class FormProxyDirtyVM { private List<Book> books; private Book currentBook; private boolean editable; private String[][] BOOKS = { {"The Very Hungry Caterpillar", "Eric Carle", "Children,Classics,Animals"}, {"The New Way Things Work", "David Macaulay", "Education,Science,Computers"}, {"The DASH Diet Younger You", "Marla Heller", "Health,Fitness,Diets"} }; @Init public void init() { books = new LinkedList<Book>(); for (String[] book : BOOKS) { books.add(initBook(book[0], book[1], book[2])); } currentBook = books.get(0); } public void setEditable(boolean editable) { this.editable = editable; } public boolean getEditable() { return editable; } public void setCurrentBook(Book book) { currentBook = book; } public Book getCurrentBook() { return currentBook; } private Book initBook(String name, String author, String categories) { Book book = new Book(); book.setName(name); book.setAuthor(author); String[] cates = categories.split(","); Set<Category> sets = new LinkedHashSet<Category>(); for (String cate : cates) { Category c = new Category(); c.setName(cate); sets.add(c); } book.setCategories(sets); return book; } public List<Book> getBooks() { return books; } public void setBooks(List<Book> book) { books = book; } @SmartNotifyChange("editable") @Command("editable") public void doEditable(@BindingParam("editable") boolean editable) { this.editable = editable; } @Command("cancel") @NotifyChange("currentBook") public void onCancel(@BindingParam("form") Form form) { } @Command("save") @NotifyChange({"currentBook", "editable"}) public void onSave() { this.editable = false; } @Command("addCategory") public void doAddCategory(@BindingParam("form") Book form, @BindingParam("cateName") String cateName) { Set<Category> categories = (Set<Category>) form.getCategories(); categories.add(new Category(cateName)); } @Command("removeCategory") public void doRemoveCategory(@BindingParam("form") Book form, @BindingParam("category") Category cate) { Set<Category> categories = (Set<Category>) form.getCategories(); categories.remove(cate); } }