package com.hongqiang.shop.modules.entity;
import java.util.HashSet;
import java.util.Iterator;
//import java.util.Iterator;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.PrePersist;
import javax.persistence.PreRemove;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
//地区
@Entity
@Table(name = "hq_area")
public class Area extends OrderEntity {
private static final long serialVersionUID = -2158109459123036967L;
private static final String PATH_SEPARATOR = ",";// 树路径分隔符
private String name;// 地区名称
private String fullName;// 全名
private String treePath;// 树路径
private Area parent;// 上级地区
private Set<Area> children = new HashSet<Area>();// 下级地区
private Set<Member> members = new HashSet<Member>();// 会员
private Set<Receiver> receivers = new HashSet<Receiver>();// 接收者
private Set<Order> orders = new HashSet<Order>();// 订单
private Set<DeliveryCenter> deliveryCenters = new HashSet<DeliveryCenter>();// 配送中心
@NotEmpty
@Length(max = 100)
@Column(nullable = false, length = 100)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(nullable = false, length = 500)
public String getFullName() {
return this.fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
@Column(nullable = false, updatable = false)
public String getTreePath() {
return this.treePath;
}
public void setTreePath(String treePath) {
this.treePath = treePath;
}
@ManyToOne(fetch = FetchType.LAZY)
public Area getParent() {
return this.parent;
}
public void setParent(Area parent) {
this.parent = parent;
}
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE )
@OrderBy("order asc")
public Set<Area> getChildren() {
return this.children;
}
public void setChildren(Set<Area> children) {
this.children = children;
}
@OneToMany(mappedBy = "area", fetch = FetchType.LAZY)
public Set<Member> getMembers() {
return this.members;
}
public void setMembers(Set<Member> members) {
this.members = members;
}
@OneToMany(mappedBy = "area", fetch = FetchType.LAZY)
public Set<Receiver> getReceivers() {
return this.receivers;
}
public void setReceivers(Set<Receiver> receivers) {
this.receivers = receivers;
}
@OneToMany(mappedBy = "area", fetch = FetchType.LAZY)
public Set<Order> getOrders() {
return this.orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
@OneToMany(mappedBy = "area", fetch = FetchType.LAZY)
public Set<DeliveryCenter> getDeliveryCenters() {
return this.deliveryCenters;
}
public void setDeliveryCenters(Set<DeliveryCenter> deliveryCenters) {
this.deliveryCenters = deliveryCenters;
}
@PrePersist
public void prePersist() {
super.prePersist();
Area localArea = getParent();
if (localArea != null) {
setFullName(localArea.getFullName() + getName());
setTreePath(localArea.getTreePath() + localArea.getId()
+ PATH_SEPARATOR);
} else {
setFullName(getName());
setTreePath(PATH_SEPARATOR);
}
}
@PreUpdate
public void preUpdate() {
super.preUpdate();
Area localArea = getParent();
if (localArea != null)
setFullName(localArea.getFullName() + getName());
else
setFullName(getName());
}
@PreRemove
public void preRemove() {
Set<Member> localSet = getMembers();
if (localSet != null) {
Iterator<Member> localObject2 = localSet.iterator();
while (localObject2.hasNext()) {
Member localObject1 = (Member) ( localObject2).next();
localObject1.setArea(null);
}
}
Set<Receiver> localObject1 = getReceivers();
if (localObject1 != null) {
Iterator<Receiver> localObject3 = localObject1.iterator();
while (localObject3.hasNext()) {
Receiver localObject2 = (Receiver) (localObject3).next();
localObject2.setArea(null);
}
}
Set<Order> localObject2 = getOrders();
if (localObject2 != null) {
Iterator<Order> localObject4 = (localObject2).iterator();
while (localObject4.hasNext()) {
Order localObject3 =(localObject4).next();
localObject3.setArea(null);
}
}
Set<DeliveryCenter> localObject3 = getDeliveryCenters();
if (localObject3 != null) {
Iterator<DeliveryCenter> localIterator = (localObject3).iterator();
while (localIterator.hasNext()) {
DeliveryCenter localObject4 = (DeliveryCenter) localIterator.next();
localObject4.setArea(null);
}
}
}
public String toString() {
return getFullName();
}
}