/** ForEachListModelVM.java. Purpose: Description: History: 02:15:14 PM Jan 26, 2015, Created by jameschu Copyright (C) 2015 Potix Corporation. All Rights Reserved. */ package org.zkoss.zktest.zats.zuti.vm; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Init; import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.sys.ComponentCtrl; import org.zkoss.zul.Label; import org.zkoss.zul.ListModelArray; import org.zkoss.zul.ListModelList; import org.zkoss.zul.ListModelMap; import org.zkoss.zul.ListModelSet; import org.zkoss.zul.Window; import org.zkoss.zktest.zats.zuti.bean.Person; /** * @author JamesChu * */ public class ForEachListModelVM implements Serializable{ private static final long serialVersionUID = -1757483024000975324L; private List<Person> dataList_l; private String[] dataList_a1D = new String[] { "Apple", "Orange", "Mango"}; private String[][] dataList_a2D = new String[][] { {"Apple", "10kg"}, {"Orange", "20kg"}, {"Mango", "12kg"} }; private Map<String, Person> dataList_m; private Set<Object> dataList_s; private ListModelList<Person> model_l; private ListModelArray<Object> model_a1D; private ListModelArray<Object> model_a2D; private ListModelMap<String, Person> model_m; private ListModelSet<Object> model_s; public ListModelList<Person> getModel_l() { return model_l; } public void setModel_l(ListModelList<Person> model_l) { this.model_l = model_l; } public ListModelArray<Object> getModel_a1D() { return model_a1D; } public void setModel_a1D(ListModelArray<Object> model_a1D) { this.model_a1D = model_a1D; } public ListModelArray<Object> getModel_a2D() { return model_a2D; } public void setModel_a2D(ListModelArray<Object> model_a2D) { this.model_a2D = model_a2D; } public ListModelMap<String, Person> getModel_m() { return model_m; } public void setModel_m(ListModelMap<String, Person> model_m) { this.model_m = model_m; } public ListModelSet<Object> getModel_s() { return model_s; } public void setModel_s(ListModelSet<Object> model_s) { this.model_s = model_s; } @Init public void init() { dataList_l = new ArrayList<Person>(); for (int i = 0; i < 5; i++) { dataList_l.add(new Person("Person#" + i, "Addr#" + i)); } model_l = new ListModelList<Person>(dataList_l, true); model_a1D = new ListModelArray<Object>(dataList_a1D); model_a2D = new ListModelArray<Object>(dataList_a2D); dataList_m = new HashMap<String, Person>(); for (int i = 0; i < 5; i++) { dataList_m.put("Person#" + i, new Person("Person#" + i, "Addr#" + i)); } model_m = new ListModelMap<String, Person>(dataList_m, true); dataList_s = new HashSet<Object>(); for (int i = 0; i < 5; i++) { dataList_s.add(new Person("Person#" + i, "Addr#" + i)); } model_s = new ListModelSet<Object>(dataList_s, true); } byte[] _bytes; public void doSerialize(Window win,Label msg){ try{ doSerialize0(win, msg); doDeserialize0(win, msg); }catch(Exception x){ x.printStackTrace(); msg.setValue("error :"+x.getClass()+","+x.getMessage()); } } public void doSerialize0(Window win, Label msg) throws Exception{ Page pg = win.getPage(); ((ComponentCtrl)win).sessionWillPassivate(pg);//simulate ByteArrayOutputStream oaos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(oaos); oos.writeObject(win); oos.close(); oaos.close(); _bytes = oaos.toByteArray(); } public void doDeserialize0(Window win, Label msg) throws Exception{ ByteArrayInputStream oaos = new ByteArrayInputStream(_bytes); ObjectInputStream oos = new ObjectInputStream(oaos); Window newwin = (Window) oos.readObject(); oos.close(); oaos.close(); replaceComponent(win, newwin); //for load component back. ((ComponentCtrl)newwin).sessionDidActivate(newwin.getPage());//simulate msg.setValue("done deserialize: "+_bytes.length); } private void replaceComponent(Component oc, Component nc) { Component parent = oc.getParent(); Component ref = oc.getNextSibling(); oc.detach(); parent.insertBefore(nc, ref); } @Command @NotifyChange({"model_l","model_a1D","model_a2D","model_m","model_s"}) public void change_model() { dataList_l = new ArrayList<Person>(); for (int i = 0; i < 3; i++) { dataList_l.add(new Person("New Person#" + i, "Addr#" + i)); } model_l = new ListModelList<Person>(dataList_l, true); String[] dataList_a1D_new = new String[] { "New Apple", "New Orange", "New Mango", "New Banana"}; String[][] dataList_a2D_new = new String[][] { {"New Apple", "10.1kg"}, {"New Orange", "20.1kg"}, {"New Mango", "12.1kg"}, {"New Banana", "11.1kg"} }; model_a1D = new ListModelArray<Object>(dataList_a1D_new); model_a2D = new ListModelArray<Object>(dataList_a2D_new); Map<String,Person> dataList_m_new = new HashMap<String, Person>(); for (int i = 0; i < 3; i++) { dataList_m_new.put("New Person#" + i, new Person("Person#" + i, "Addr#" + i)); } model_m = new ListModelMap<String, Person>(dataList_m_new, true); Set<Object> dataList_s_new = new HashSet<Object>(); for (int i = 0; i < 5; i++) { dataList_s_new.add(new Person("Person#" + i, "Addr#" + i)); } model_s = new ListModelSet<Object>(dataList_s_new, true); } @Command public void add() { dataList_l.add(new Person("Person#5", "Addr#5 - person")); //Because of live model model_l.add(new Person("Person#6", "Addr#6 - model")); dataList_m.put("New Person#5", new Person("Person#5", "Addr#5 - person")); model_m.put("New Person#6", new Person("Person#6", "Addr#6 - model")); dataList_s.add(new Person("Person#5", "Addr#5 - person")); model_s.add(new Person("Person#6", "Addr#6 - model")); } @Command public void update() { Person p = dataList_l.get(0); p.setName("<model person change>"); model_l.set(0, p); dataList_a1D[0] += "<model person change>"; model_a1D.set(0, dataList_a1D[0]); dataList_a2D[0][0] += "<model person change>"; dataList_a2D[0][1] += "<model person change>"; model_a2D.set(0, dataList_a2D[0]); p = (Person) model_m.getElementAt(0).getValue(); model_m.put(model_m.getElementAt(0).getKey(), new Person(p.getName(), "Addr#<model person change>")); } @Command public void remove() { model_l.remove(model_l.getSize() - 1); model_m.remove(model_m.getElementAt(model_m.getSize() - 1).getKey()); model_s.remove(model_s.getElementAt(model_s.getSize() - 1)); } }