Java tutorial
/* * 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(); } } } }