001 package org.kuali.student.r2.lum.lrc.model;
002
003 import java.math.BigDecimal;
004 import java.util.ArrayList;
005 import org.kuali.student.r1.common.entity.KSEntityConstants;
006 import org.kuali.student.r2.common.dto.AttributeInfo;
007 import org.kuali.student.r2.common.entity.AttributeOwner;
008 import org.kuali.student.r2.common.entity.MetaEntity;
009 import org.kuali.student.r2.common.infc.Attribute;
010 import org.kuali.student.r2.lum.lrc.dto.ResultValueInfo;
011
012 import javax.persistence.CascadeType;
013 import javax.persistence.Column;
014 import javax.persistence.Entity;
015 import javax.persistence.FetchType;
016 import javax.persistence.OneToMany;
017 import javax.persistence.Table;
018 import javax.persistence.Temporal;
019 import javax.persistence.TemporalType;
020 import java.util.Date;
021 import java.util.HashSet;
022 import java.util.Set;
023 import javax.persistence.EntityManager;
024 import javax.persistence.NamedQueries;
025 import javax.persistence.NamedQuery;
026 import org.kuali.student.r2.common.util.RichTextHelper;
027
028 @Entity
029 @Table(name = "KSEN_LRC_RESULT_VALUE")
030 @NamedQueries({
031 @NamedQuery(name = "ResultValueEntity.getIdsByType",
032 query = "select id from ResultValueEntity where type = :type"),
033 @NamedQuery(name = "ResultValueEntity.getByScale",
034 query = "select RV from ResultValueEntity RV where RV.resultScaleId = :resultScaleKey"),
035 @NamedQuery(name = "ResultValueEntity.getByScaleAndValue",
036 query = "select RV from ResultValueEntity RV where RV.resultScaleId = :resultScaleKey and RV.value = :value")
037 })
038 public class ResultValueEntity extends MetaEntity implements AttributeOwner<ResultValueAttributeEntity> {
039
040 @Column(name = "RESULT_VALUE_TYPE")
041 private String type;
042 @Column(name = "RESULT_VALUE_STATE")
043 private String state;
044 @Column(name = "NAME")
045 private String name;
046 @Column(name = "DESCR_PLAIN", length = KSEntityConstants.EXTRA_LONG_TEXT_LENGTH)
047 private String descrPlain;
048 @Column(name = "DESCR_FORMATTED", length = KSEntityConstants.EXTRA_LONG_TEXT_LENGTH)
049 private String descrFormatted;
050 @Column(name = "RESULT_SCALE_ID")
051 private String resultScaleId;
052 @Column(name = "NUMERIC_VALUE")
053 private BigDecimal numericValue;
054 @Column(name = "RESULT_VALUE")
055 private String value;
056 @Temporal(TemporalType.TIMESTAMP)
057 @Column(name = "EFF_DT")
058 private Date effectiveDate;
059 @Temporal(TemporalType.TIMESTAMP)
060 @Column(name = "EXPIR_DT")
061 private Date expirationDate;
062 @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner", fetch = FetchType.EAGER)
063 private Set<ResultValueAttributeEntity> attributes;
064
065 public ResultValueEntity() {
066 }
067
068 public ResultValueEntity(ResultValueInfo dto, EntityManager em) {
069 super(dto);
070 this.setId(dto.getKey());
071 this.setType(dto.getTypeKey());
072 setResultScaleId(dto.getResultScaleKey());
073 this.fromDTO(dto, em);
074 }
075
076 public void fromDTO(ResultValueInfo dto, EntityManager em) {
077 this.setName(dto.getName());
078 this.setState(dto.getStateKey());
079 if (dto.getDescr() != null) {
080 this.setDescrFormatted(dto.getDescr().getFormatted());
081 this.setDescrPlain(dto.getDescr().getPlain());
082 } else {
083 this.setDescrFormatted(null);
084 this.setDescrPlain(null);
085 }
086 setEffectiveDate(dto.getEffectiveDate());
087 setExpirationDate(dto.getExpirationDate());
088 if(dto.getNumericValue() != null){
089 setNumericValue(new BigDecimal(dto.getNumericValue()));
090 }
091 else
092 {
093 setNumericValue (null);
094 }
095 setValue(dto.getValue());
096 // dynamic attributes
097 if (this.getAttributes() == null) {
098 this.setAttributes(new HashSet<ResultValueAttributeEntity>());
099 }
100 Set<String> idSet = new HashSet<String>(dto.getAttributes().size());
101 for (AttributeInfo attr : dto.getAttributes()) {
102 if (attr.getId() != null) {
103 idSet.add(attr.getId());
104 }
105 }
106 for (ResultValueAttributeEntity attEntity : new ArrayList<ResultValueAttributeEntity> (this.getAttributes())) {
107 if (!idSet.contains(attEntity.getId())) {
108 em.remove(attEntity);
109 this.getAttributes().remove(attEntity);
110 }
111 }
112 for (Attribute att : dto.getAttributes()) {
113 ResultValueAttributeEntity attEntity = new ResultValueAttributeEntity(att, this);
114 this.getAttributes().add(attEntity);
115 }
116 }
117
118 public String getResultScaleId() {
119 return resultScaleId;
120 }
121
122 public void setResultScaleId(String resultScaleId) {
123 this.resultScaleId = resultScaleId;
124 }
125
126 public BigDecimal getNumericValue() {
127 return numericValue;
128 }
129
130 public void setNumericValue(BigDecimal numericValue) {
131 this.numericValue = numericValue;
132 }
133
134 public String getValue() {
135 return value;
136 }
137
138 public void setValue(String value) {
139 this.value = value;
140 }
141
142 public Date getEffectiveDate() {
143 return effectiveDate;
144 }
145
146 public void setEffectiveDate(Date effectiveDate) {
147 this.effectiveDate = effectiveDate;
148 }
149
150 public Date getExpirationDate() {
151 return expirationDate;
152 }
153
154 public void setExpirationDate(Date expirationDate) {
155 this.expirationDate = expirationDate;
156 }
157
158 public String getName() {
159 return name;
160 }
161
162 public void setName(String name) {
163 this.name = name;
164 }
165
166 public String getDescrFormatted() {
167 return descrFormatted;
168 }
169
170 public void setDescrFormatted(String descrFormatted) {
171 this.descrFormatted = descrFormatted;
172 }
173
174 public String getDescrPlain() {
175 return descrPlain;
176 }
177
178 public void setDescrPlain(String descrPlain) {
179 this.descrPlain = descrPlain;
180 }
181
182 public String getType() {
183 return type;
184 }
185
186 public void setType(String type) {
187 this.type = type;
188 }
189
190 public String getState() {
191 return state;
192 }
193
194 public void setState(String state) {
195 this.state = state;
196 }
197
198 @Override
199 public void setAttributes(Set<ResultValueAttributeEntity> attributes) {
200 this.attributes = attributes;
201 }
202
203 @Override
204 public Set<ResultValueAttributeEntity> getAttributes() {
205 return attributes;
206 }
207
208 public ResultValueInfo toDto() {
209 ResultValueInfo info = new ResultValueInfo();
210 info.setKey(getId());
211 info.setTypeKey(getType());
212 info.setStateKey(getState());
213 info.setName(getName());
214 info.setDescr(new RichTextHelper().toRichTextInfo(getDescrPlain(), getDescrFormatted()));
215 info.setResultScaleKey(getResultScaleId());
216 info.setNumericValue(String.valueOf(getNumericValue()));
217 info.setValue(getValue());
218 info.setEffectiveDate(getEffectiveDate());
219 info.setExpirationDate(getExpirationDate());
220 if (this.getAttributes() != null) {
221 for (ResultValueAttributeEntity att : getAttributes()) {
222 AttributeInfo attInfo = att.toDto();
223 info.getAttributes().add(attInfo);
224 }
225 }
226 info.setMeta(super.toDTO());
227 return info;
228 }
229 }