package com.syzton.sunread.model.organization; import java.util.HashSet; import java.util.Set; 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.OneToOne; import javax.persistence.PrePersist; import javax.persistence.PreUpdate; import javax.persistence.Table; import org.hibernate.annotations.Type; import org.joda.time.DateTime; import com.fasterxml.jackson.annotation.JsonIgnore; import com.syzton.sunread.dto.organization.CategoryCountDTO; import com.syzton.sunread.dto.organization.ClazzDTO; import com.syzton.sunread.model.common.AbstractEntity; /** * Created by Morgan-Leon on 2015/3/16. */ @Entity @Table(name="clazz") //@JsonIgnoreProperties(value = {"grade"}) public class Clazz extends AbstractEntity{ public static final int MAX_LENGTH_DESCRIPTION = 500; public static final int MAX_LENGTH_NAME = 100; @Column(name ="name", nullable = false, length = MAX_LENGTH_NAME) private String name; @Column(name = "grade", nullable = false) private int grade = 0; @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") @JsonIgnore private DateTime modificationTime; @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false) @JoinColumn(name = "campus") @JsonIgnore private Campus campus; @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER) @JoinColumn(name = "calzz_statistic_id") private ClazzStatistic clazzStatistic = new ClazzStatistic(); @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "clazz_id") private Set<ClazzCategoryCount> categoryCount = new HashSet<>(); public ClazzStatistic getClazzStatistic() { return clazzStatistic; } public void setClazzStatistic(ClazzStatistic clazzStatistic) { this.clazzStatistic = clazzStatistic; } public Clazz() { } public DateTime getModificationTime() { return modificationTime; } public void setName(String name) { this.name = name; } public void setGrade(int grade) { this.grade = grade; } public void setDescription(String description) { this.description = description; } public void setModificationTime(DateTime modificationTime) { this.modificationTime = modificationTime; } public void setCampus(Campus campus) { this.campus = campus; } public void setCategoryCount(Set<ClazzCategoryCount> categoryCount) { this.categoryCount = categoryCount; } public String getName() { return name; } public static Builder getBuilder(String name, int grade, Campus campus) { return new Builder(name, grade, campus); } public String getDescription() { return description; } public int getGrade() { return grade; } public Campus getCampus() { return campus; } public Set<ClazzCategoryCount> getCategoryCount() { return categoryCount; } @PrePersist public void prePersist() { DateTime now = DateTime.now(); creationTime = now; modificationTime = now; } @PreUpdate public void preUpdate() { modificationTime = DateTime.now(); } public void update(String name) { this.name = name; } public static class Builder { private Clazz built; public Builder() { built = new Clazz(); } public Clazz build() { return built; } public Builder(String name,int grade, Campus campus) { built = new Clazz(); built.name = name; built.grade = grade; built.campus = campus; } public Builder description(String description) { // TODO Auto-generated method stub built.description = description; return this; } } public ClazzDTO createDTO(Clazz model) { ClazzDTO dto = new ClazzDTO(); dto.setId(model.id); dto.setName(model.getName()); dto.setGrade(model.grade); //dto.setCampusId(model.campus.getId()); dto.setCampusName(model.campus.getName()); dto.setDescription(model.getDescription()); for (ClazzCategoryCount c : model.getCategoryCount()){ CategoryCountDTO cDto = new CategoryCountDTO(); cDto.setCount(c.getCount()); cDto.setCategoryName(c.getDictionary().getName()); dto.getCategoryCountDTOs().add(cDto); } return dto; } }