package com.syzton.sunread.model.organization; import java.util.HashSet; import java.util.Set; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.PrePersist; import javax.persistence.PreUpdate; import javax.persistence.Table; import com.syzton.sunread.dto.organization.ClazzDTO; import org.hibernate.annotations.Type; import org.joda.time.DateTime; import com.syzton.sunread.dto.organization.CampusDTO; import com.syzton.sunread.model.common.AbstractEntity; import com.syzton.sunread.model.region.Region; import com.syzton.sunread.model.region.SchoolDistrict; /** * @author Morgan-Leon * @Date 2015年4月6日 * */ @Entity @Table(name="campus") public class Campus extends AbstractEntity{ public static final int MAX_LENGTH_DESCRIPTION = 500; public static final int MAX_LENGTH_NAME = 100; public static final int MAX_LENGTH_HEADMASTER = 500; public static final int DEFAULT_NOTE_SCORE = 5; @Column(name ="name", nullable = false, unique = true,length = MAX_LENGTH_NAME) private String name; @Column(name = "description", nullable = true, length = MAX_LENGTH_DESCRIPTION) private String description; @Column(name = "modification_time", nullable = false) @Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime") private DateTime modificationTime; @Column(name = "headmaster", nullable = false, length = MAX_LENGTH_HEADMASTER) private String headmaster; @Column(name = "wish", nullable = false, length = MAX_LENGTH_HEADMASTER) private String wish; @Column(name = "note_score") private int noteScore = DEFAULT_NOTE_SCORE; @OneToMany(cascade = CascadeType.ALL,mappedBy = "campus") @Basic(fetch = FetchType.LAZY) private Set<Clazz> clazz = new HashSet<Clazz>(); @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false) @JoinColumn(name = "region") private Region region; @ManyToOne(cascade = {CascadeType.MERGE,CascadeType.REFRESH },optional = false) @JoinColumn(name = "edu_group") private EduGroup eduGroup; @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false) @JoinColumn(name = "school_district") private SchoolDistrict schoolDistrict; public Region getRegion() { return region; } public void setRegion(Region region) { this.region = region; } public String getName() { return name; } public void setName(String name){ this.name = name; } public String getDescription() { return description; } public void setDescription(String description){ this.description = description; } public DateTime getModificationTime() { return modificationTime; } public String getHeadmaster() { return headmaster; } public void setHeadmaster(String headmaster) { this.headmaster = headmaster; } public Set<Clazz> getClazz() { return clazz; } public int clazzNum() { return this.clazz.size(); } public EduGroup getEduGroup() { return eduGroup; } public void setEduGroup(EduGroup eduGroup) { this.eduGroup = eduGroup; } public SchoolDistrict getSchoolDistrict() { return schoolDistrict; } public void setSchoolDistrict(SchoolDistrict schoolDistrict) { this.schoolDistrict = schoolDistrict; } public String getWish() { return wish; } public void setWish(String wish) { this.wish = wish; } public int getNoteScore() { return noteScore; } public void setNoteScore(int noteScore) { this.noteScore = noteScore; } @PrePersist public void prePersist() { DateTime now = DateTime.now(); creationTime = now; modificationTime = now; } @PreUpdate public void preUpdate() { modificationTime = DateTime.now(); } public static class Builder{ private Campus built; public Builder(String name, String headmaster,String wish,int noteScore ,Region region,EduGroup eduGroup, SchoolDistrict schoolDistrict){ built = new Campus(); built.name = name; built.headmaster = headmaster; built.wish = wish; built.noteScore = noteScore; built.region = region; built.eduGroup = eduGroup; built.schoolDistrict = schoolDistrict; } public Campus build() { return built; } public Builder description(String description) { // TODO Auto-generated method stub built.description = description; return this; } public Builder wish(String wish) { built.wish = wish; return this; } } /** */ public void update(String name,String headmaster,String wish, String description, int noteScore ) { if(name.length()>0) this.name = name; if(headmaster.length()>0) this.headmaster = headmaster; if(wish.length()>0) this.wish = wish; if(noteScore > 0) this.noteScore = noteScore; if(description.length()>0) this.description = description; } /** * @return */ public static Builder getBuilder(String name, String headmaster,String wish ,int noteScore,Region region ,EduGroup eduGroup, SchoolDistrict schoolDistrict) { // TODO Auto-generated method stub return new Builder(name, headmaster,wish, noteScore,region,eduGroup, schoolDistrict); } public CampusDTO createDTO() { CampusDTO dto = new CampusDTO(); dto.setId(id); dto.setName(getName()); dto.setDescription(getDescription()); dto.setHeadmaster(headmaster); dto.setWish(wish); dto.setSchoolDistrictId(schoolDistrict.getId()); dto.setSchoolDistrictName(schoolDistrict.getName()); dto.setClassNum(clazzNum()); dto.setEduGroupId(eduGroup.getId()); dto.setEduGroupName(eduGroup.getName()); dto.setNoteScore(getNoteScore()); dto.setRegionId(region.getId()); dto.setRegionName(region.getName()); Set<ClazzDTO> clazzDTOSet = new HashSet<>(); for(Clazz cz : clazz){ ClazzDTO clazzDTO = new ClazzDTO(); clazzDTO.setId(cz.getId()); clazzDTO.setName(cz.getName()); clazzDTO.setGrade(cz.getGrade()); clazzDTOSet.add(clazzDTO); } dto.setClazzDTOSet(clazzDTOSet); return dto; } }