1 package org.kuali.student.enrollment.class1.lui.model;
2
3 import org.kuali.student.enrollment.lui.dto.LuiLuiRelationInfo;
4 import org.kuali.student.enrollment.lui.infc.LuiLuiRelation;
5 import org.kuali.student.r1.common.entity.KSEntityConstants;
6 import org.kuali.student.r2.common.assembler.TransformUtility;
7 import org.kuali.student.r2.common.entity.AttributeOwner;
8 import org.kuali.student.r2.common.entity.MetaEntity;
9 import org.kuali.student.r2.common.util.RichTextHelper;
10
11 import javax.persistence.CascadeType;
12 import javax.persistence.Column;
13 import javax.persistence.Entity;
14 import javax.persistence.FetchType;
15 import javax.persistence.JoinColumn;
16 import javax.persistence.ManyToOne;
17 import javax.persistence.NamedQueries;
18 import javax.persistence.NamedQuery;
19 import javax.persistence.OneToMany;
20 import javax.persistence.Table;
21 import javax.persistence.Temporal;
22 import javax.persistence.TemporalType;
23 import java.util.ArrayList;
24 import java.util.Date;
25 import java.util.HashSet;
26 import java.util.List;
27 import java.util.Set;
28
29 @Entity
30 @Table(name = "KSEN_LUILUI_RELTN")
31 @NamedQueries({
32 @NamedQuery(name="LuiLuiRelationENR.getLuiLuiRelationsByLui", query="SELECT rel from LuiLuiRelationEntity rel where rel.lui.id=:luiId OR rel.relatedLui.id=:luiId"),
33 @NamedQuery(name="LuiLuiRelationENR.getLuiIdsByRelation", query="select rel.lui.id from LuiLuiRelationEntity rel where rel.relatedLui.id=:relatedLuiId and rel.luiLuiRelationType=:luLuRelationTypeKey"),
34 @NamedQuery(name="LuiLuiRelationENR.getLuiIdsAndStateByRelatedLuisAndRelationType", query="Select distinct rel.lui.id, rel.lui.luiState from LuiLuiRelationEntity rel where rel.relatedLui.id in (:luiIds) AND rel.luiLuiRelationType=:luiLuiRelationTypeKey"),
35 @NamedQuery(name="LuiLuiRelationENR.getLuisByRelation", query = "select rel.lui from LuiLuiRelationEntity rel where rel.relatedLui.id=:relatedLuiId and rel.luiLuiRelationType=:luLuRelationTypeKey"),
36 @NamedQuery(name="LuiLuiRelationENR.getRelatedLuisByLuiId", query="select rel.relatedLui.id from LuiLuiRelationEntity rel where rel.lui.id=:luiId and rel.luiLuiRelationType=:luLuRelationTypeKey"),
37 @NamedQuery(name="LuiLuiRelationENR.getLuiLuiRelationsByRelatedLuiAndLuiId", query="Select rel from LuiLuiRelationEntity rel where rel.lui.id=:luiId AND rel.relatedLui.id=:relatedLuiId"),
38 @NamedQuery(name="LuiLuiRelationENR.getRelatedLuisByLuiIdAndRelationType", query="Select rel.relatedLui from LuiLuiRelationEntity rel where rel.lui.id=:luiId AND rel.luiLuiRelationType=:luiLuiRelationTypeKey"),
39 @NamedQuery(name="LuiLuiRelationENR.getRelatedLuiIdsByLuiIdAndRelationType", query="Select rel.relatedLui.id from LuiLuiRelationEntity rel where rel.lui.id=:luiId AND rel.luiLuiRelationType=:luiLuiRelationTypeKey"),
40 @NamedQuery(name="LuiLuiRelationENR.getLuiLuiRelationIdsByType", query="select rel.id from LuiLuiRelationEntity rel where rel.luiLuiRelationType=:luiLuiRelationTypeKey"),
41 @NamedQuery(name="LuiLuiRelationENR.getLuiLuiRelationsByIds", query="Select rel from LuiLuiRelationEntity rel where rel.id in (:ids)")
42 })
43 public class LuiLuiRelationEntity extends MetaEntity implements AttributeOwner<LuiLuiRelationAttributeEntity> {
44
45 @Column(name = "NAME")
46 private String name;
47 @Column(name = "DESCR_FORMATTED", length = KSEntityConstants.EXTRA_LONG_TEXT_LENGTH)
48 private String formatted;
49 @Column(name = "DESCR_PLAIN", length = KSEntityConstants.EXTRA_LONG_TEXT_LENGTH)
50 private String plain;
51 @ManyToOne
52 @JoinColumn(name = "LUI_ID")
53 private LuiEntity lui;
54 @ManyToOne
55 @JoinColumn(name = "RELATED_LUI_ID")
56 private LuiEntity relatedLui;
57 @Column(name = "LUILUI_RELTN_TYPE")
58 private String luiLuiRelationType;
59 @Column(name = "LUILUI_RELTN_STATE")
60 private String luiLuiRelationState;
61 @Temporal(TemporalType.TIMESTAMP)
62 @Column(name = "EFF_DT")
63 private Date effectiveDate;
64 @Temporal(TemporalType.TIMESTAMP)
65 @Column(name = "EXPIR_DT")
66 private Date expirationDate;
67 @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner", fetch = FetchType.EAGER)
68 private Set<LuiLuiRelationAttributeEntity> attributes = new HashSet<LuiLuiRelationAttributeEntity>();
69
70 public LuiLuiRelationEntity() {
71 }
72
73 public LuiLuiRelationEntity(LuiLuiRelation luiLuiRelation) {
74 this.setId(luiLuiRelation.getId());
75 this.setLuiLuiRelationType(luiLuiRelation.getTypeKey());
76 fromDto(luiLuiRelation);
77 }
78
79 public List<Object> fromDto(LuiLuiRelation luiLuiRelation) {
80
81 super.fromDTO(luiLuiRelation);
82
83 List<Object> orphansToDelete = new ArrayList<Object>();
84
85 this.setEffectiveDate(luiLuiRelation.getEffectiveDate());
86 this.setExpirationDate(luiLuiRelation.getExpirationDate());
87 this.setLuiLuiRelationState(luiLuiRelation.getStateKey());
88 this.setName(luiLuiRelation.getName());
89 if (luiLuiRelation.getDescr() == null) {
90 this.setDescrFormatted(null);
91 this.setDescrPlain(null);
92 } else {
93 this.setDescrFormatted(luiLuiRelation.getDescr().getFormatted());
94 this.setDescrPlain(luiLuiRelation.getDescr().getPlain());
95 }
96
97
98 orphansToDelete.addAll(TransformUtility.mergeToEntityAttributes(LuiLuiRelationAttributeEntity.class, luiLuiRelation, this));
99
100 return orphansToDelete;
101 }
102
103 public LuiLuiRelationInfo toDto() {
104 LuiLuiRelationInfo info = new LuiLuiRelationInfo();
105 info.setId(getId());
106 if (lui != null) {
107 info.setLuiId(lui.getId());
108 }
109 if (relatedLui != null) {
110 info.setRelatedLuiId(relatedLui.getId());
111 }
112 info.setEffectiveDate(effectiveDate);
113 info.setExpirationDate(expirationDate);
114 info.setStateKey(luiLuiRelationState);
115 info.setTypeKey(luiLuiRelationType);
116 info.setMeta(super.toDTO());
117 info.setDescr(new RichTextHelper().toRichTextInfo(plain, formatted));
118
119
120 info.setAttributes(TransformUtility.toAttributeInfoList(this));
121
122 return info;
123 }
124
125 public String getName() {
126 return name;
127 }
128
129 public void setName(String name) {
130 this.name = name;
131 }
132
133 public String getDescrFormatted() {
134 return formatted;
135 }
136
137 public void setDescrFormatted(String formatted) {
138 this.formatted = formatted;
139 }
140
141 public String getDescrPlain() {
142 return plain;
143 }
144
145 public void setDescrPlain(String plain) {
146 this.plain = plain;
147 }
148
149 public LuiEntity getLui() {
150 return lui;
151 }
152
153 public void setLui(LuiEntity lui) {
154 this.lui = lui;
155 }
156
157 public LuiEntity getRelatedLui() {
158 return relatedLui;
159 }
160
161 public void setRelatedLui(LuiEntity relatedLui) {
162 this.relatedLui = relatedLui;
163 }
164
165 public String getLuiLuiRelationType() {
166 return luiLuiRelationType;
167 }
168
169 public void setLuiLuiRelationType(String luiLuiRelationType) {
170 this.luiLuiRelationType = luiLuiRelationType;
171 }
172
173 public String getLuiLuiRelationState() {
174 return luiLuiRelationState;
175 }
176
177 public void setLuiLuiRelationState(String luiLuiRelationState) {
178 this.luiLuiRelationState = luiLuiRelationState;
179 }
180
181 public Date getEffectiveDate() {
182 return effectiveDate;
183 }
184
185 public void setEffectiveDate(Date effectiveDate) {
186 this.effectiveDate = effectiveDate;
187 }
188
189 public Date getExpirationDate() {
190 return expirationDate;
191 }
192
193 public void setExpirationDate(Date expirationDate) {
194 this.expirationDate = expirationDate;
195 }
196
197 public void setAttributes(Set<LuiLuiRelationAttributeEntity> attributes) {
198 this.attributes = attributes;
199
200 }
201
202 public Set<LuiLuiRelationAttributeEntity> getAttributes() {
203 return attributes;
204 }
205 }