net.shopxx.entity.Member.java Source code

Java tutorial

Introduction

Here is the source code for net.shopxx.entity.Member.java

Source

/*
 * Copyright 2005-2013 shopxx.net. All rights reserved.
 * Support: http://www.shopxx.net
 * License: http://www.shopxx.net/license
 */
package net.shopxx.entity;

import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.OrderBy;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import net.shopxx.entity.MemberAttribute.Type;
import net.shopxx.entity.virtual.VirAccount;
import net.shopxx.interceptor.MemberInterceptor;
import net.shopxx.util.JsonUtils;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.StringUtils;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

/**
 * Entity - 
 * 
 * @author SHOP++ Team
 * @version 3.0
 */
@Entity
@Table(name = "xx_member")
@SequenceGenerator(name = "sequenceGenerator", sequenceName = "xx_member_sequence")
public class Member extends BaseEntity {

    private static final long serialVersionUID = 1533130686714725835L;

    /**
     * 
     */
    public enum Gender {

        /**  */
        male,

        /**  */
        female
    }

    /** "?"??? */
    public static final String PRINCIPAL_ATTRIBUTE_NAME = MemberInterceptor.class.getName() + ".PRINCIPAL";

    /** "??"Cookie?? */
    public static final String USERNAME_COOKIE_NAME = "username";

    /**  */
    public static final int ATTRIBUTE_VALUE_PROPERTY_COUNT = 10;

    /** ??? */
    public static final String ATTRIBUTE_VALUE_PROPERTY_NAME_PREFIX = "attributeValue";

    /** ?? */
    public static final Integer MAX_FAVORITE_COUNT = 10;

    /** ?? */
    private String username;

    /** ? */
    private String password;

    /** E-mail */
    private String email;

    /**  */
    private Long point;

    /** ? */
    private BigDecimal amount;

    /** ? */
    private BigDecimal balance;

    /** ?? */
    private Boolean isEnabled;

    /** ?? */
    private Boolean isLocked;

    /**  */
    private Integer loginFailureCount;

    /** ? */
    private Date lockedDate;

    /** IP */
    private String registerIp;

    /** ?IP */
    private String loginIp;

    /** ? */
    private Date loginDate;

    /** ?? */
    private String name;

    /**  */
    private Gender gender;

    /**  */
    private Date birth;

    /** ? */
    private String address;

    /**  */
    private String zipCode;

    /** ? */
    private String phone;

    /**  */
    private String mobile;

    /** 0 */
    private String attributeValue0;

    /** 1 */
    private String attributeValue1;

    /** 2 */
    private String attributeValue2;

    /** 3 */
    private String attributeValue3;

    /** 4 */
    private String attributeValue4;

    /** 5 */
    private String attributeValue5;

    /** 6 */
    private String attributeValue6;

    /** 7 */
    private String attributeValue7;

    /** 8 */
    private String attributeValue8;

    /** 9 */
    private String attributeValue9;

    private Boolean activateEmail;
    private Boolean activateMobile;
    private Boolean activateIdcard;

    private String trueName;
    private String idCard;
    private String registStep;
    private String idCardImg;
    private String userImg;

    /**  */
    private SafeKey safeKey;

    /**  */
    private Area area;

    /**  */
    private MemberRank memberRank;

    /**  */
    private Cart cart;

    /** ? */
    private Set<Order> orders = new HashSet<Order>();

    /** ? */
    private Set<VirAccount> virAccounts = new HashSet<VirAccount>();

    /**  */
    private Set<Deposit> deposits = new HashSet<Deposit>();

    /** ? */
    private Set<Payment> payments = new HashSet<Payment>();

    /** ? */
    private Set<CouponCode> couponCodes = new HashSet<CouponCode>();

    /** ? */
    private Set<Receiver> receivers = new HashSet<Receiver>();

    /**  */
    private Set<Review> reviews = new HashSet<Review>();

    /**  */
    private Set<Consultation> consultations = new HashSet<Consultation>();

    /** ?? */
    private Set<Product> favoriteProducts = new HashSet<Product>();

    /**  */
    private Set<ProductNotify> productNotifies = new HashSet<ProductNotify>();

    /** ? */
    private Set<Message> inMessages = new HashSet<Message>();

    /** ??? */
    private Set<Message> outMessages = new HashSet<Message>();

    /**
     * ???
     * 
     * @return ??
     */
    @NotEmpty(groups = Save.class)
    @Pattern(regexp = "^[0-9a-z_A-Z\\u4e00-\\u9fa5]+$")
    @Column(nullable = false, updatable = false, unique = true, length = 100)
    public String getUsername() {
        return username;
    }

    /**
     * ??
     * 
     * @param username ??
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * ??
     * 
     * @return ?
     */
    @NotEmpty(groups = Save.class)
    @Pattern(regexp = "^[^\\s&\"<>]+$")
    @Column(nullable = false)
    public String getPassword() {
        return password;
    }

    /**
     * ?
     * 
     * @param password ?
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * ?E-mail
     * 
     * @return E-mail
     */
    @NotEmpty
    @Email
    @Length(max = 200)
    @Column(nullable = false)
    public String getEmail() {
        return email;
    }

    /**
     * E-mail
     * 
     * @param email E-mail
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * ?
     * 
     * @return 
     */
    @NotNull(groups = Save.class)
    @Min(0)
    @Column(nullable = false)
    public Long getPoint() {
        return point;
    }

    /**
     * 
     * 
     * @param point 
     */
    public void setPoint(Long point) {
        this.point = point;
    }

    /**
     * ??
     * 
     * @return ?
     */
    @Column(nullable = false, precision = 27, scale = 12)
    public BigDecimal getAmount() {
        return amount;
    }

    /**
     * ?
     * 
     * @param amount ?
     */
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    /**
     * ??
     * 
     * @return ?
     */
    @NotNull(groups = Save.class)
    @Min(0)
    @Digits(integer = 12, fraction = 3)
    @Column(nullable = false, precision = 27, scale = 12)
    public BigDecimal getBalance() {
        return balance;
    }

    /**
     * ?
     * 
     * @param balance ?
     */
    public void setBalance(BigDecimal balance) {
        this.balance = balance;
    }

    /**
     * ???
     * 
     * @return ??
     */
    @NotNull
    @Column(nullable = false)
    public Boolean getIsEnabled() {
        return isEnabled;
    }

    /**
     * ??
     * 
     * @param isEnabled ??
     */
    public void setIsEnabled(Boolean isEnabled) {
        this.isEnabled = isEnabled;
    }

    /**
     * ???
     * 
     * @return ??
     */
    @Column(nullable = false)
    public Boolean getIsLocked() {
        return isLocked;
    }

    /**
     * ??
     * 
     * @param isLocked ??
     */
    public void setIsLocked(Boolean isLocked) {
        this.isLocked = isLocked;
    }

    /**
     * ?
     * 
     * @return 
     */
    @Column(nullable = false)
    public Integer getLoginFailureCount() {
        return loginFailureCount;
    }

    /**
     * 
     * 
     * @param loginFailureCount 
     */
    public void setLoginFailureCount(Integer loginFailureCount) {
        this.loginFailureCount = loginFailureCount;
    }

    /**
     * ??
     * 
     * @return ?
     */
    public Date getLockedDate() {
        return lockedDate;
    }

    /**
     * ?
     * 
     * @param lockedDate ?
     */
    public void setLockedDate(Date lockedDate) {
        this.lockedDate = lockedDate;
    }

    /**
     * ?IP
     * 
     * @return IP
     */
    @Column(nullable = false, updatable = false)
    public String getRegisterIp() {
        return registerIp;
    }

    /**
     * IP
     * 
     * @param registerIp IP
     */
    public void setRegisterIp(String registerIp) {
        this.registerIp = registerIp;
    }

    /**
     * ??IP
     * 
     * @return ?IP
     */
    public String getLoginIp() {
        return loginIp;
    }

    /**
     * ?IP
     * 
     * @param loginIp ?IP
     */
    public void setLoginIp(String loginIp) {
        this.loginIp = loginIp;
    }

    /**
     * ??
     * 
     * @return ?
     */
    public Date getLoginDate() {
        return loginDate;
    }

    /**
     * ?
     * 
     * @param loginDate ?
     */
    public void setLoginDate(Date loginDate) {
        this.loginDate = loginDate;
    }

    /**
     * ???
     * 
     * @return ??
     */
    @Length(max = 200)
    public String getName() {
        return name;
    }

    /**
     * ??
     * 
     * @param name ??
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * ?
     * 
     * @return 
     */
    public Gender getGender() {
        return gender;
    }

    /**
     * 
     * 
     * @param gender 
     */
    public void setGender(Gender gender) {
        this.gender = gender;
    }

    /**
     * ?
     * 
     * @return 
     */
    public Date getBirth() {
        return birth;
    }

    /**
     * 
     * 
     * @param birth 
     */
    public void setBirth(Date birth) {
        this.birth = birth;
    }

    /**
     * ??
     * 
     * @return ?
     */
    @Length(max = 200)
    public String getAddress() {
        return address;
    }

    /**
     * ?
     * 
     * @param address ?
     */
    public void setAddress(String address) {
        this.address = address;
    }

    /**
     * ?
     * 
     * @return 
     */
    @Length(max = 200)
    public String getZipCode() {
        return zipCode;
    }

    /**
     * 
     * 
     * @param zipCode 
     */
    public void setZipCode(String zipCode) {
        this.zipCode = zipCode;
    }

    /**
     * ??
     * 
     * @return ?
     */
    @Length(max = 200)
    public String getPhone() {
        return phone;
    }

    /**
     * ?
     * 
     * @param phone ?
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }

    /**
     * ?
     * 
     * @return 
     */
    @Length(max = 200)
    public String getMobile() {
        return mobile;
    }

    /**
     * 
     * 
     * @param mobile 
     */
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    /**
     * ?0
     * 
     * @return 0
     */
    @Length(max = 200)
    public String getAttributeValue0() {
        return attributeValue0;
    }

    /**
     * 0
     * 
     * @param attributeValue0 0
     */
    public void setAttributeValue0(String attributeValue0) {
        this.attributeValue0 = attributeValue0;
    }

    /**
     * ?1
     * 
     * @return 1
     */
    @Length(max = 200)
    public String getAttributeValue1() {
        return attributeValue1;
    }

    /**
     * 1
     * 
     * @param attributeValue1 1
     */
    public void setAttributeValue1(String attributeValue1) {
        this.attributeValue1 = attributeValue1;
    }

    /**
     * ?2
     * 
     * @return 2
     */
    @Length(max = 200)
    public String getAttributeValue2() {
        return attributeValue2;
    }

    /**
     * 2
     * 
     * @param attributeValue2 2
     */
    public void setAttributeValue2(String attributeValue2) {
        this.attributeValue2 = attributeValue2;
    }

    /**
     * ?3
     * 
     * @return 3
     */
    @Length(max = 200)
    public String getAttributeValue3() {
        return attributeValue3;
    }

    /**
     * 3
     * 
     * @param attributeValue3 3
     */
    public void setAttributeValue3(String attributeValue3) {
        this.attributeValue3 = attributeValue3;
    }

    /**
     * ?4
     * 
     * @return 4
     */
    @Length(max = 200)
    public String getAttributeValue4() {
        return attributeValue4;
    }

    /**
     * 4
     * 
     * @param attributeValue4 4
     */
    public void setAttributeValue4(String attributeValue4) {
        this.attributeValue4 = attributeValue4;
    }

    /**
     * ?5
     * 
     * @return 5
     */
    @Length(max = 200)
    public String getAttributeValue5() {
        return attributeValue5;
    }

    /**
     * 5
     * 
     * @param attributeValue5 5
     */
    public void setAttributeValue5(String attributeValue5) {
        this.attributeValue5 = attributeValue5;
    }

    /**
     * ?6
     * 
     * @return 6
     */
    @Length(max = 200)
    public String getAttributeValue6() {
        return attributeValue6;
    }

    /**
     * 6
     * 
     * @param attributeValue6 6
     */
    public void setAttributeValue6(String attributeValue6) {
        this.attributeValue6 = attributeValue6;
    }

    /**
     * ?7
     * 
     * @return 7
     */
    @Length(max = 200)
    public String getAttributeValue7() {
        return attributeValue7;
    }

    /**
     * 7
     * 
     * @param attributeValue7 7
     */
    public void setAttributeValue7(String attributeValue7) {
        this.attributeValue7 = attributeValue7;
    }

    /**
     * ?8
     * 
     * @return 8
     */
    @Length(max = 200)
    public String getAttributeValue8() {
        return attributeValue8;
    }

    /**
     * 8
     * 
     * @param attributeValue8 8
     */
    public void setAttributeValue8(String attributeValue8) {
        this.attributeValue8 = attributeValue8;
    }

    /**
     * ?9
     * 
     * @return 9
     */
    @Length(max = 200)
    public String getAttributeValue9() {
        return attributeValue9;
    }

    /**
     * 9
     * 
     * @param attributeValue9 9
     */
    public void setAttributeValue9(String attributeValue9) {
        this.attributeValue9 = attributeValue9;
    }

    /**
     * ???
     * 
     * @return
     */
    @Length(max = 200)
    public String getTrueName() {
        return trueName;
    }

    /**
     * ??
     * 
     * @param trueName
     */
    public void setTrueName(String trueName) {
        this.trueName = trueName;
    }

    @Length(max = 200)
    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    @Length(max = 200)
    public String getIdCardImg() {
        return idCardImg;
    }

    public void setIdCardImg(String idCardImg) {
        this.idCardImg = idCardImg;
    }

    @Length(max = 200)
    public String getRegistStep() {
        return registStep;
    }

    public void setRegistStep(String registStep) {
        this.registStep = registStep;
    }

    @Length(max = 200)
    public String getUserImg() {
        return userImg;
    }

    public void setUserImg(String userImg) {
        this.userImg = userImg;
    }

    @Column(nullable = false)
    public Boolean getActivateEmail() {
        return activateEmail;
    }

    public void setActivateEmail(Boolean activateEmail) {
        this.activateEmail = activateEmail;
    }

    @Column(nullable = false)
    public Boolean getActivateMobile() {
        return activateMobile;
    }

    public void setActivateMobile(Boolean activateMobile) {
        this.activateMobile = activateMobile;
    }

    @Column(nullable = false)
    public Boolean getActivateIdcard() {
        return activateIdcard;
    }

    public void setActivateIdcard(Boolean activateIdcard) {
        this.activateIdcard = activateIdcard;
    }

    /**
     * ?
     * 
     * @return 
     */
    @Embedded
    public SafeKey getSafeKey() {
        return safeKey;
    }

    /**
     * 
     * 
     * @param safeKey 
     */
    public void setSafeKey(SafeKey safeKey) {
        this.safeKey = safeKey;
    }

    /**
     * ?
     * 
     * @return 
     */
    @ManyToOne(fetch = FetchType.LAZY)
    public Area getArea() {
        return area;
    }

    /**
     * 
     * 
     * @param area 
     */
    public void setArea(Area area) {
        this.area = area;
    }

    /**
     * ?
     * 
     * @return 
     */
    @NotNull
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(nullable = false)
    public MemberRank getMemberRank() {
        return memberRank;
    }

    /**
     * 
     * 
     * @param memberRank 
     */
    public void setMemberRank(MemberRank memberRank) {
        this.memberRank = memberRank;
    }

    /**
     * ?
     * 
     * @return 
     */
    @OneToOne(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    public Cart getCart() {
        return cart;
    }

    /**
     * 
     * 
     * @param cart 
     */
    public void setCart(Cart cart) {
        this.cart = cart;
    }

    /**
     * ??
     * 
     * @return ?
     */
    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    public Set<Order> getOrders() {
        return orders;
    }

    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    public Set<VirAccount> getVirAccounts() {
        return virAccounts;
    }

    public void setVirAccounts(Set<VirAccount> virAccounts) {
        this.virAccounts = virAccounts;
    }

    /**
      * ?
      * 
      * @param orders ?
      */
    public void setOrders(Set<Order> orders) {
        this.orders = orders;
    }

    /**
     * ?
     * 
     * @return 
     */
    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    public Set<Deposit> getDeposits() {
        return deposits;
    }

    /**
     * 
     * 
     * @param deposits 
     */
    public void setDeposits(Set<Deposit> deposits) {
        this.deposits = deposits;
    }

    /**
     * ??
     * 
     * @return ?
     */
    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    public Set<Payment> getPayments() {
        return payments;
    }

    /**
     * ?
     * 
     * @param payments ?
     */
    public void setPayments(Set<Payment> payments) {
        this.payments = payments;
    }

    /**
     * ??
     * 
     * @return ?
     */
    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    public Set<CouponCode> getCouponCodes() {
        return couponCodes;
    }

    /**
     * ?
     * 
     * @param couponCodes ?
     */
    public void setCouponCodes(Set<CouponCode> couponCodes) {
        this.couponCodes = couponCodes;
    }

    /**
     * ??
     * 
     * @return ?
     */
    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    @OrderBy("isDefault desc, createDate desc")
    public Set<Receiver> getReceivers() {
        return receivers;
    }

    /**
     * ?
     * 
     * @param receivers ?
     */
    public void setReceivers(Set<Receiver> receivers) {
        this.receivers = receivers;
    }

    /**
     * ?
     * 
     * @return 
     */
    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    @OrderBy("createDate desc")
    public Set<Review> getReviews() {
        return reviews;
    }

    /**
     * 
     * 
     * @param reviews 
     */
    public void setReviews(Set<Review> reviews) {
        this.reviews = reviews;
    }

    /**
     * ?
     * 
     * @return 
     */
    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    @OrderBy("createDate desc")
    public Set<Consultation> getConsultations() {
        return consultations;
    }

    /**
     * 
     * 
     * @param consultations 
     */
    public void setConsultations(Set<Consultation> consultations) {
        this.consultations = consultations;
    }

    /**
     * ???
     * 
     * @return ??
     */
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "xx_member_favorite_product")
    @OrderBy("createDate desc")
    public Set<Product> getFavoriteProducts() {
        return favoriteProducts;
    }

    /**
     * ??
     * 
     * @param favoriteProducts ??
     */
    public void setFavoriteProducts(Set<Product> favoriteProducts) {
        this.favoriteProducts = favoriteProducts;
    }

    /**
     * ?
     * 
     * @return 
     */
    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    public Set<ProductNotify> getProductNotifies() {
        return productNotifies;
    }

    /**
     * 
     * 
     * @param productNotifies 
     */
    public void setProductNotifies(Set<ProductNotify> productNotifies) {
        this.productNotifies = productNotifies;
    }

    /**
     * ??
     * 
     * @return ?
     */
    @OneToMany(mappedBy = "receiver", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    public Set<Message> getInMessages() {
        return inMessages;
    }

    /**
     * ?
     * 
     * @param inMessages ?
     */
    public void setInMessages(Set<Message> inMessages) {
        this.inMessages = inMessages;
    }

    /**
     * ????
     * 
     * @return ???
     */
    @OneToMany(mappedBy = "sender", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    public Set<Message> getOutMessages() {
        return outMessages;
    }

    /**
     * ???
     * 
     * @param outMessages ???
     */
    public void setOutMessages(Set<Message> outMessages) {
        this.outMessages = outMessages;
    }

    /**
     * ?
     * 
     * @param memberAttribute 
     * @return 
     */
    @Transient
    public Object getAttributeValue(MemberAttribute memberAttribute) {
        if (memberAttribute != null) {
            if (memberAttribute.getType() == Type.name) {
                return getName();
            } else if (memberAttribute.getType() == Type.gender) {
                return getGender();
            } else if (memberAttribute.getType() == Type.birth) {
                return getBirth();
            } else if (memberAttribute.getType() == Type.area) {
                return getArea();
            } else if (memberAttribute.getType() == Type.address) {
                return getAddress();
            } else if (memberAttribute.getType() == Type.zipCode) {
                return getZipCode();
            } else if (memberAttribute.getType() == Type.phone) {
                return getPhone();
            } else if (memberAttribute.getType() == Type.mobile) {
                return getMobile();
            } else if (memberAttribute.getType() == Type.checkbox) {
                if (memberAttribute.getPropertyIndex() != null) {
                    try {
                        String propertyName = ATTRIBUTE_VALUE_PROPERTY_NAME_PREFIX
                                + memberAttribute.getPropertyIndex();
                        String propertyValue = (String) PropertyUtils.getProperty(this, propertyName);
                        if (propertyValue != null) {
                            return JsonUtils.toObject(propertyValue, List.class);
                        }
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    }
                }
            } else {
                if (memberAttribute.getPropertyIndex() != null) {
                    try {
                        String propertyName = ATTRIBUTE_VALUE_PROPERTY_NAME_PREFIX
                                + memberAttribute.getPropertyIndex();
                        return (String) PropertyUtils.getProperty(this, propertyName);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return null;
    }

    /**
     * 
     * 
     * @param memberAttribute 
     * @param attributeValue 
     */
    @Transient
    public void setAttributeValue(MemberAttribute memberAttribute, Object attributeValue) {
        if (memberAttribute != null) {
            if (attributeValue instanceof String && StringUtils.isEmpty((String) attributeValue)) {
                attributeValue = null;
            }
            if (memberAttribute.getType() == Type.name
                    && (attributeValue instanceof String || attributeValue == null)) {
                setName((String) attributeValue);
            } else if (memberAttribute.getType() == Type.gender
                    && (attributeValue instanceof Gender || attributeValue == null)) {
                setGender((Gender) attributeValue);
            } else if (memberAttribute.getType() == Type.birth
                    && (attributeValue instanceof Date || attributeValue == null)) {
                setBirth((Date) attributeValue);
            } else if (memberAttribute.getType() == Type.area
                    && (attributeValue instanceof Area || attributeValue == null)) {
                setArea((Area) attributeValue);
            } else if (memberAttribute.getType() == Type.address
                    && (attributeValue instanceof String || attributeValue == null)) {
                setAddress((String) attributeValue);
            } else if (memberAttribute.getType() == Type.zipCode
                    && (attributeValue instanceof String || attributeValue == null)) {
                setZipCode((String) attributeValue);
            } else if (memberAttribute.getType() == Type.phone
                    && (attributeValue instanceof String || attributeValue == null)) {
                setPhone((String) attributeValue);
            } else if (memberAttribute.getType() == Type.mobile
                    && (attributeValue instanceof String || attributeValue == null)) {
                setMobile((String) attributeValue);
            } else if (memberAttribute.getType() == Type.checkbox
                    && (attributeValue instanceof List || attributeValue == null)) {
                if (memberAttribute.getPropertyIndex() != null) {
                    if (attributeValue == null || (memberAttribute.getOptions() != null
                            && memberAttribute.getOptions().containsAll((List<?>) attributeValue))) {
                        try {
                            String propertyName = ATTRIBUTE_VALUE_PROPERTY_NAME_PREFIX
                                    + memberAttribute.getPropertyIndex();
                            PropertyUtils.setProperty(this, propertyName, JsonUtils.toJson(attributeValue));
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        } catch (InvocationTargetException e) {
                            e.printStackTrace();
                        } catch (NoSuchMethodException e) {
                            e.printStackTrace();
                        }
                    }
                }
            } else {
                if (memberAttribute.getPropertyIndex() != null) {
                    try {
                        String propertyName = ATTRIBUTE_VALUE_PROPERTY_NAME_PREFIX
                                + memberAttribute.getPropertyIndex();
                        PropertyUtils.setProperty(this, propertyName, attributeValue);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    /**
     * 
     */
    @Transient
    public void removeAttributeValue() {
        setName(null);
        setGender(null);
        setBirth(null);
        setArea(null);
        setAddress(null);
        setZipCode(null);
        setPhone(null);
        setMobile(null);
        for (int i = 0; i < ATTRIBUTE_VALUE_PROPERTY_COUNT; i++) {
            String propertyName = ATTRIBUTE_VALUE_PROPERTY_NAME_PREFIX + i;
            try {
                PropertyUtils.setProperty(this, propertyName, null);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
        }
    }

}