package com.jspxcms.core.domain; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.CollectionTable; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.MapKeyColumn; import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.Table; import javax.persistence.TableGenerator; import javax.persistence.Transient; /** * Model * * @author liufang * */ @Entity @Table(name = "cms_model") public class Model implements java.io.Serializable { private static final long serialVersionUID = 1L; @Transient public Set<String> getPredefinedNames() { Set<String> names = new HashSet<String>(); for (ModelField field : getFields()) { if (field.isPredefined()) { names.add(field.getName()); } } return names; } @Transient public List<ModelField> getEnabledFields() { List<ModelField> fields = getFields(); List<ModelField> enabledFields = new ArrayList<ModelField>(); for (ModelField field : fields) { if (!field.getDisabled()) { enabledFields.add(field); } } return enabledFields; } @Transient public ModelField getField(String name) { for (ModelField field : getFields()) { if (field.getName().equals(name)) { return field; } } return null; } public void addField(ModelField field) { List<ModelField> fields = getFields(); if (fields == null) { fields = new ArrayList<ModelField>(); setFields(fields); } fields.add(field); } public void applyDefaultValue() { if (getSeq() == null) { setSeq(Integer.MAX_VALUE); } } private Integer id; private List<ModelField> fields = new ArrayList<ModelField>(); private Map<String, String> customs = new HashMap<String, String>(); private Site site; private String type; private String name; private Integer seq; public Model() { } @Id @Column(name = "f_model_id", unique = true, nullable = false) @TableGenerator(name = "tg_cms_model", pkColumnValue = "cms_model", table = "t_id_table", pkColumnName = "f_table", valueColumnName = "f_id_value", initialValue = 1, allocationSize = 1) @GeneratedValue(strategy = GenerationType.TABLE, generator = "tg_cms_model") public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "model") @OrderBy(value = "seq asc, id asc") public List<ModelField> getFields() { return this.fields; } public void setFields(List<ModelField> fields) { this.fields = fields; } @ElementCollection @CollectionTable(name = "cms_model_custom", joinColumns = @JoinColumn(name = "f_model_id")) @MapKeyColumn(name = "f_key", length = 50) @Column(name = "f_value", length = 2000) public Map<String, String> getCustoms() { return this.customs; } public void setCustoms(Map<String, String> customs) { this.customs = customs; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "f_site_id", nullable = false) public Site getSite() { return site; } public void setSite(Site site) { this.site = site; } @Column(name = "f_type", nullable = false, length = 100) public String getType() { return this.type; } public void setType(String type) { this.type = type; } @Column(name = "f_name", nullable = false, length = 50) public String getName() { return this.name; } public void setName(String name) { this.name = name; } @Column(name = "f_seq", nullable = false) public Integer getSeq() { return this.seq; } public void setSeq(Integer seq) { this.seq = seq; } }