zktest/src/main/java/org/zkoss/zktest/bind/basic/LoadIndirectComposer.java

Summary

Maintainability
B
6 hrs
Test Coverage
/* ZKBindLoad1Composer.java

    Purpose:
        
    Description:
        
    History:
        Aug 2, 2011 1:01:07 PM, Created by henrichen

Copyright (C) 2011 Potix Corporation. All Rights Reserved.
*/

package org.zkoss.zktest.bind.basic;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.zkoss.bind.BindComposer;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.DependsOn;
import org.zkoss.bind.annotation.NotifyChange;

/**
 * @author Dennis Chen
 *
 */
public class LoadIndirectComposer extends BindComposer {

    public class Person {
        private String firstName;
        private String lastName;
        private Date birthday;
        private boolean gender;
        private String phone;
        private Address address;
        
        public Person(String fname, String lname) {
            firstName = fname;
            lastName = lname;
        }
        
        //fire property change to base.firstName
        @NotifyChange
        public void setFirstName(String n) {
            this.firstName = n;
        }
        public String getFirstName() {
            return this.firstName;
        }
        
        @NotifyChange
        public void setLastName(String n) {
            this.lastName = n;
        }
        public String getLastName() {
            return this.lastName;
        }
        
        @DependsOn({"firstName", "lastName"})
        public String getFullName() {
            return this.firstName + " " + this.lastName;
        }
        
        @NotifyChange
        public void setBirthday(Date d) {
            this.birthday = d;
        }
        public Date getBirthday() {
            return this.birthday;
        }
        
        @NotifyChange
        public void setGender(boolean male) {
            this.gender = male;
        }
        public boolean getGender() {
            return this.gender;
        }
        
        @NotifyChange
        public void setPhone(String p) {
            this.phone = p;
        }
        public String getPhone() {
            return this.phone;
        }
        
        @NotifyChange
        public void setAddress(Address addr) {
            address = addr;
        }
        public Address getAddress() {
            if (address == null) {
                address = new Address("","");
            }
            return this.address;
        }

        @DependsOn({"address.street", "address.zip"})
        public String getFullAddr() {
            return address == null ? null : (address.getStreet() + " " + address.getZip());
        }
        
    }    
    public class Address {
        private String _zip;
        private String _street;
        public Address(String street, String zip) {
            _zip = zip;
            _street = street;
        }
        public String getZip() {
            return _zip;
        }
        public String getStreet() {
            return _street;
        }
        @NotifyChange
        public void setZip(String zip) {
            _zip = zip;
        }
        @NotifyChange
        public void setStreet(String street) {
            _street = street;
        }
    }
    private Person _selected;
    private List<Person> _persons;
    private String currField = "firstName";
    
    private Person _p2;
    
    public LoadIndirectComposer() {
        _persons = new ArrayList<Person>();
        for(int j = 0; j < 4; ++j) {
            _persons.add(new Person("First"+j , "Last"+j));
        }
        _selected = _persons.get(1); //2nd person
        Address addr = new Address("87 Zhengzhou Road #11F-2 Taipei", "103");
        _selected.setAddress(addr);
    }
    
    public Person getSelected() {
        return _selected;
    }
    @NotifyChange
    public void setSelected(Person p) {
        _selected = p;
    }
    
    public List<Person> getPersons() {
        return _persons;
    }
    
    public Person getP1() {
        return getSelected();
    }
    
    int i=0;

    public String getCurrField() {
        return currField;
    }

    @NotifyChange({"currField"})
    public void setCurrField(String currField) {
        this.currField = currField;
    }

    @Command @NotifyChange({"currField"})
    public void toFirstName() {
        currField = "firstName";
    }
    
    @Command @NotifyChange({"currField"})
    public void toLastName() {
        currField = "lastName";
    }
    
    @Command @NotifyChange({"currField"})
    public void toFullName() {
        currField = "fullName";
    }
    
    
    public Person getP2(){
        return _p2;
    }
    
    @Command @NotifyChange({"p1","p2"})
    public void saveForm(){
        _p2 = new Person(_selected.getFirstName(),_selected.getLastName());
    }
}