Customer.java
Home
/
sm-core-model /
src /
main /
java /
com /
salesmanager /
core /
model /
customer /
Customer.java
package com.salesmanager.core.model.customer;
import java.util.ArrayList;
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.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.Valid;
import org.hibernate.annotations.Cascade;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import com.salesmanager.core.constants.SchemaConstant;
import com.salesmanager.core.model.catalog.product.review.ProductReview;
import com.salesmanager.core.model.common.Billing;
import com.salesmanager.core.model.common.Delivery;
import com.salesmanager.core.model.customer.attribute.CustomerAttribute;
import com.salesmanager.core.model.generic.SalesManagerEntity;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.language.Language;
import com.salesmanager.core.model.user.Group;
import com.salesmanager.core.utils.CloneUtils;
@Entity
@Table(name = "CUSTOMER", schema=SchemaConstant.SALESMANAGER_SCHEMA)
public class Customer extends SalesManagerEntity<Long, Customer> {
private static final long serialVersionUID = -6966934116557219193L;
@Id
@Column(name = "CUSTOMER_ID", unique=true, nullable=false)
@TableGenerator(name = "TABLE_GEN", table = "SM_SEQUENCER", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT",
pkColumnValue = "CUSTOMER_SEQ_NEXT_VAL")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN")
private Long id;
//@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE, mappedBy = "customer")
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "customer")
private Set<CustomerAttribute> attributes = new HashSet<CustomerAttribute>();
@Column(name="CUSTOMER_GENDER", length=1, nullable=true)
@Enumerated(value = EnumType.STRING)
private CustomerGender gender;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="CUSTOMER_DOB")
private Date dateOfBirth;
@Email
@NotEmpty
@Column(name="CUSTOMER_EMAIL_ADDRESS", length=96, nullable=false)
private String emailAddress;
@Column(name="CUSTOMER_NICK", length=96)
private String nick;
@Column(name="CUSTOMER_COMPANY", length=100)
private String company;
@Column(name="CUSTOMER_PASSWORD", length=60)
private String password;
@Column(name="CUSTOMER_ANONYMOUS")
private boolean anonymous;
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Language.class)
@JoinColumn(name = "LANGUAGE_ID", nullable=false)
private Language defaultLanguage;
@OneToMany(mappedBy = "customer", targetEntity = ProductReview.class)
private List<ProductReview> reviews = new ArrayList<ProductReview>();
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="MERCHANT_ID", nullable=false)
private MerchantStore merchantStore;
@Embedded
private Delivery delivery = null;
@Valid
@Embedded
private Billing billing = null;
@ManyToMany(fetch=FetchType.LAZY, cascade = {CascadeType.REFRESH})
@JoinTable(name = "CUSTOMER_GROUP", schema=SchemaConstant.SALESMANAGER_SCHEMA, joinColumns = {
@JoinColumn(name = "CUSTOMER_ID", nullable = false, updatable = false) }
,
inverseJoinColumns = { @JoinColumn(name = "GROUP_ID",
nullable = false, updatable = false) }
)
@Cascade({
org.hibernate.annotations.CascadeType.DETACH,
org.hibernate.annotations.CascadeType.LOCK,
org.hibernate.annotations.CascadeType.REFRESH,
org.hibernate.annotations.CascadeType.REPLICATE
})
private List<Group> groups = new ArrayList<Group>();
@Transient
private String showCustomerStateList;
@Transient
private String showBillingStateList;
@Transient
private String showDeliveryStateList;
public Customer() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getDateOfBirth() {
return CloneUtils.clone(dateOfBirth);
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = CloneUtils.clone(dateOfBirth);
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public String getNick() {
return nick;
}
public void setNick(String nick) {
this.nick = nick;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isAnonymous() {
return anonymous;
}
public void setAnonymous(boolean anonymous) {
this.anonymous = anonymous;
}
public List<ProductReview> getReviews() {
return reviews;
}
public void setReviews(List<ProductReview> reviews) {
this.reviews = reviews;
}
public void setMerchantStore(MerchantStore merchantStore) {
this.merchantStore = merchantStore;
}
public MerchantStore getMerchantStore() {
return merchantStore;
}
public void setDelivery(Delivery delivery) {
this.delivery = delivery;
}
public Delivery getDelivery() {
return delivery;
}
public void setBilling(Billing billing) {
this.billing = billing;
}
public Billing getBilling() {
return billing;
}
public void setGroups(List<Group> groups) {
this.groups = groups;
}
public List<Group> getGroups() {
return groups;
}
public String getShowCustomerStateList() {
return showCustomerStateList;
}
public void setShowCustomerStateList(String showCustomerStateList) {
this.showCustomerStateList = showCustomerStateList;
}
public String getShowBillingStateList() {
return showBillingStateList;
}
public void setShowBillingStateList(String showBillingStateList) {
this.showBillingStateList = showBillingStateList;
}
public String getShowDeliveryStateList() {
return showDeliveryStateList;
}
public void setShowDeliveryStateList(String showDeliveryStateList) {
this.showDeliveryStateList = showDeliveryStateList;
}
public Language getDefaultLanguage() {
return defaultLanguage;
}
public void setDefaultLanguage(Language defaultLanguage) {
this.defaultLanguage = defaultLanguage;
}
public void setAttributes(Set<CustomerAttribute> attributes) {
this.attributes = attributes;
}
public Set<CustomerAttribute> getAttributes() {
return attributes;
}
public void setGender(CustomerGender gender) {
this.gender = gender;
}
public CustomerGender getGender() {
return gender;
}
}