/* ================================================================== * Created [2009-4-27 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.component.dynproperty.entity; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import com.jinhe.tss.component.dynproperty.DynConstants; import com.jinhe.tss.core.exception.BusinessException; import com.jinhe.tss.core.persistence.IEntity; import com.jinhe.tss.core.util.BeanUtil; import com.jinhe.tss.core.util.DateUtil; import com.jinhe.tss.core.web.dispaly.tree.ITreeNode; import com.jinhe.tss.core.web.dispaly.tree.TreeAttributesMap; import com.jinhe.tss.core.web.dispaly.xform.IXForm; /** * <p> Propertydef.java </p> * * @author Jon.King 2008/04/14 10:18:10 * * 自定义属性表 * 唯一索引:entityCode, key */ @Entity @Table(name = "component_dyn_propertydef", uniqueConstraints = { @UniqueConstraint(name="MULTI_NAME_PROPERTY_DEF", columnNames = { "entityCode", "name" }), @UniqueConstraint(name="MULTI_CODE_PROPERTY_DEF", columnNames = { "entityCode", "key" }) }) @SequenceGenerator(name = "dyn_def_sequence", sequenceName = "dyn_def_sequence", initialValue = 1000, allocationSize = 10) public class PropertyDef implements IEntity, IXForm, ITreeNode { @Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "dyn_def_sequence") private Long id; //自定义属性ID  主键 private String entityCode; //对应的实体类型code,在导入基本属性时在配置文件中设定,用来唯一标识不同动态对象 private String entityName; //对应的实体名称 (类名) private Integer seqNo; //显示顺序 private String name; //名称 private String key; //字段名称(E) private String type; //类型 1:文本 2:日期 3:数字 4:大字段 5:上传文件 6: 密码 private String editor; //编辑器 0:文本框 1:多行文本框 2:下拉列表 3:单选框 private Integer length; //长度 private String format; //格式化 private String verify; //校验 private String remark; //备注 @Column(name="option_", length = 4000) private String option ; //选项(值域) private String defaultValue ; //默认值 private Integer allowNull ; //是否可空 private Integer allowMulti ; //是否多值   private Integer isdyn = new Integer(0); //判断是动态属性还是基本属性 0:基本属性 1:动态属性 private Integer isHidden = new Integer(0); //该属性是否隐藏 0:显示 1:隐藏 private Integer isSpare = new Integer(0); //是否是备用属性 0:备用 1:启用 public boolean isdyn(){ return new Integer(1).equals(isdyn); } public boolean isHidden(){ return new Integer(1).equals(isHidden); } public boolean isSpare(){ return new Integer(1).equals(isSpare); } public boolean isAllowingNull(){ return new Integer(1).equals(allowNull); } public boolean isAllowingMulti(){ return new Integer(1).equals(allowMulti); } public Map<String, Object> getAttributesForXForm() { Map<String, Object> map = new HashMap<String, Object>(); BeanUtil.addBeanProperties2Map(this, map); return map; } public TreeAttributesMap getAttributes() { TreeAttributesMap map = new TreeAttributesMap(id, name); map.put("type", DynConstants.PROPERTY_TYPE); map.put("isdyn", this.isdyn); map.put("isSpare", this.isSpare); if(isSpare()){ if(this.key.startsWith("spareLong")) { map.put("icon", "images/backup_num.gif"); } if(this.key.startsWith("spareStr")) { map.put("icon", "images/backup_chr.gif"); } if(this.key.startsWith("spareDate")) { map.put("icon", "images/backup_time.gif"); } } else{ map.put("icon", "images/" + (new Integer(1).equals(isdyn) ? "d" : "") + "property.gif"); } return map; } public String genMode(){ if(isHidden()){ return "\"hidden\""; } switch(type.charAt(0)){ case '1': case '4': case '5': case '6': return "\"string\""; case '2': return "\"date\"" + (this.format == null ? " pattern=\"" + DateUtil.DEFAULT_DATE_PATTERN + "\"" : ""); case '3': return "\"number\""; default: throw new BusinessException("动态属性type值有误!"); } } public String genEditor(){ if(type.equals("6")) return " editor=\"password\""; if(type.equals("4")) return " editor=\"textarea\""; if(type.equals("2") || type.equals("3") || type.equals("5") ) return " editor=\"text\""; StringBuffer sb = new StringBuffer(); switch(this.editor.charAt(0)){ case '0': return " editor=\"text\""; case '1': return " editor=\"textarea\""; case '2': sb.append(" editor=\"comboedit\"").append(genOption()); break; case '3': sb.append(" editor=\"radio\"").append(genOption()); break; } return sb.toString(); } private String genOption(){ StringBuffer sb = new StringBuffer(); if(this.option != null){ StringBuffer editorvalue = new StringBuffer(); StringBuffer editortext = new StringBuffer(); StringTokenizer stk = new StringTokenizer(this.option.trim()); while(stk.hasMoreTokens()){ String oneOption = stk.nextToken(); Object[] objs = oneOption.split("/"); if(objs.length != 2){ throw new BusinessException("动态属性:【" + this.name + "】 值域:【" + this.option + "】格式不正确,请修改后在操作"); } if(editorvalue.length() > 0){ editorvalue.append("|"); editortext.append("|"); } editorvalue.append(objs[0]); editortext.append(objs[1]); } sb.append(" editorvalue=\"").append(editorvalue).append("\""); sb.append(" editortext=\"").append(editortext).append("\""); } return sb.toString(); } public String genColumn(){ StringBuffer sb = new StringBuffer("<column "); sb.append("name=\"").append(this.key); sb.append("\" caption=\"").append(this.name).append("\" mode=").append(this.genMode()); if(!isHidden()) { sb.append(" empty=").append(isAllowingNull() ? "\"true\"" : "\"false\""); } if(isAllowingMulti()){ sb.append(" multiple=\"true\""); } if(this.format != null){ sb.append(" pattern=\"").append(this.format).append("\""); } if(this.length != null){ sb.append(" maxLength=\"").append(this.length).append("\""); } if(this.verify != null){ sb.append(" inputReg=\"").append(this.verify).append("\""); } if(this.defaultValue != null){ sb.append(" defaultValue=\"").append(this.defaultValue).append("\""); } sb.append(genEditor()); return sb.append(" />").toString(); } public String genDynKey(){ return "dynpropertiesMap['" + this.key + "']"; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getEntityCode() { return entityCode; } public void setEntityCode(String entityCode) { this.entityCode = entityCode; } public String getEntityName() { return entityName; } public void setEntityName(String entityName) { this.entityName = entityName; } public Integer getSeqNo() { return seqNo; } public void setSeqNo(Integer seqNo) { this.seqNo = seqNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getEditor() { return editor; } public void setEditor(String editor) { this.editor = editor; } public Integer getLength() { return length; } public void setLength(Integer length) { this.length = length; } public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } public String getVerify() { return verify; } public void setVerify(String verify) { this.verify = verify; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public String getOption() { return option; } public void setOption(String option) { this.option = option; } public String getDefaultValue() { return defaultValue; } public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } public Integer getAllowNull() { return allowNull; } public void setAllowNull(Integer allowNull) { this.allowNull = allowNull; } public Integer getAllowMulti() { return allowMulti; } public void setAllowMulti(Integer allowMulti) { this.allowMulti = allowMulti; } public Integer getIsdyn() { return isdyn; } public void setIsdyn(Integer isdyn) { this.isdyn = isdyn; } public Integer getIsHidden() { return isHidden; } public void setIsHidden(Integer isHidden) { this.isHidden = isHidden; } public Integer getIsSpare() { return isSpare; } public void setIsSpare(Integer isSpare) { this.isSpare = isSpare; } }