1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kim.document;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.apache.log4j.Logger;
20 import org.hibernate.annotations.Fetch;
21 import org.hibernate.annotations.FetchMode;
22 import org.hibernate.annotations.Type;
23 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteStatusChange;
24 import org.kuali.rice.kim.api.KimConstants;
25 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
26 import org.kuali.rice.kim.api.type.KimAttributeField;
27 import org.kuali.rice.kim.api.type.KimType;
28 import org.kuali.rice.kim.bo.ui.GroupDocumentMember;
29 import org.kuali.rice.kim.bo.ui.GroupDocumentQualifier;
30 import org.kuali.rice.kim.impl.type.IdentityManagementTypeAttributeTransactionalDocument;
31 import org.kuali.rice.kim.service.KIMServiceLocatorInternal;
32 import org.kuali.rice.krad.service.SequenceAccessorService;
33 import org.springframework.util.AutoPopulatingList;
34
35 import javax.persistence.AttributeOverride;
36 import javax.persistence.AttributeOverrides;
37 import javax.persistence.CascadeType;
38 import javax.persistence.Column;
39 import javax.persistence.Entity;
40 import javax.persistence.FetchType;
41 import javax.persistence.JoinColumn;
42 import javax.persistence.OneToMany;
43 import javax.persistence.Table;
44 import javax.persistence.Transient;
45 import java.util.ArrayList;
46 import java.util.HashMap;
47 import java.util.List;
48 import java.util.Map;
49
50
51
52
53
54
55
56
57 @Entity
58 @AttributeOverrides({
59 @AttributeOverride(name="documentNumber",column=@Column(name="FDOC_NBR"))
60 })
61 @Table(name="KRIM_GRP_DOCUMENT_T")
62 public class IdentityManagementGroupDocument extends IdentityManagementTypeAttributeTransactionalDocument {
63 private static final Logger LOG = Logger.getLogger(IdentityManagementGroupDocument.class);
64
65 private static final long serialVersionUID = 1L;
66
67
68 @Column(name="GRP_ID")
69 protected String groupId;
70 @Column(name="KIM_TYP_ID")
71 protected String groupTypeId;
72 @Transient
73 protected String groupTypeName;
74 @Column(name="GRP_NMSPC")
75 protected String groupNamespace;
76 @Column(name="GRP_NM")
77 protected String groupName;
78 @Column(name="GRP_DESC")
79 protected String groupDescription;
80 @Type(type="yes_no")
81 @Column(name="ACTV_IND")
82 protected boolean active = true;
83
84 @Transient
85 protected boolean editing;
86
87 @OneToMany(targetEntity = GroupDocumentMember.class, fetch = FetchType.EAGER, cascade=CascadeType.ALL)
88 @Fetch(value = FetchMode.SELECT)
89 @JoinColumn(name="FDOC_NBR", insertable = false, updatable = false)
90 private List<GroupDocumentMember> members = new AutoPopulatingList(GroupDocumentMember.class);
91 @OneToMany(targetEntity = GroupDocumentQualifier.class, fetch = FetchType.EAGER, cascade=CascadeType.ALL)
92 @Fetch(value = FetchMode.SELECT)
93 @JoinColumn(name="FDOC_NBR", insertable = false, updatable = false)
94 private List<GroupDocumentQualifier> qualifiers = new AutoPopulatingList(GroupDocumentQualifier.class);
95
96 public IdentityManagementGroupDocument() {
97 }
98
99
100
101
102 public boolean isActive() {
103 return this.active;
104 }
105
106
107
108
109 public void setActive(boolean active) {
110 this.active = active;
111 }
112
113
114
115
116 public void setRoleId(String groupId) {
117 this.groupId = groupId;
118 }
119
120
121
122
123 public void addMember(GroupDocumentMember member) {
124 getMembers().add(member);
125 }
126
127
128
129
130 public KimType getKimType() {
131 if (getGroupTypeId() != null) {
132 return KimApiServiceLocator.getKimTypeInfoService().getKimType(getGroupTypeId());
133 }
134 return null;
135 }
136
137 public GroupDocumentMember getBlankMember() {
138 return new GroupDocumentMember();
139 }
140
141
142
143
144 @Override
145 public void doRouteStatusChange(DocumentRouteStatusChange statusChangeEvent) {
146 super.doRouteStatusChange(statusChangeEvent);
147 if (getDocumentHeader().getWorkflowDocument().isProcessed()) {
148 KIMServiceLocatorInternal.getUiDocumentService().saveGroup(this);
149 }
150 }
151
152 @Override
153 public void prepareForSave(){
154 String groupId;
155 if(StringUtils.isBlank(getGroupId())){
156 SequenceAccessorService sas = getSequenceAccessorService();
157 Long nextSeq = sas.getNextAvailableSequenceNumber(
158 "KRIM_GRP_ID_S", this.getClass());
159 groupId = nextSeq.toString();
160 setGroupId(groupId);
161 } else{
162 groupId = getGroupId();
163 }
164 if(getMembers()!=null){
165 String groupMemberId;
166 for(GroupDocumentMember member: getMembers()){
167 member.setGroupId(getGroupId());
168 if(StringUtils.isBlank(member.getGroupMemberId())){
169 SequenceAccessorService sas = getSequenceAccessorService();
170 Long nextSeq = sas.getNextAvailableSequenceNumber(
171 "KRIM_GRP_MBR_ID_S", this.getClass());
172 groupMemberId = nextSeq.toString();
173 member.setGroupMemberId(groupMemberId);
174 }
175 if (StringUtils.isBlank(member.getDocumentNumber())) {
176 member.setDocumentNumber(getDocumentNumber());
177 }
178 }
179 }
180 int index = 0;
181
182 if(getDefinitions()!=null){
183 for(KimAttributeField key : getDefinitions()) {
184 if ( getQualifiers().size() > index ) {
185 GroupDocumentQualifier qualifier = getQualifiers().get(index);
186 qualifier.setKimAttrDefnId(getKimAttributeDefnId(key));
187 qualifier.setKimTypId(getKimType().getId());
188 qualifier.setGroupId(groupId);
189 }
190 index++;
191 }
192 }
193 }
194
195 public void initializeDocumentForNewGroup() {
196 if(StringUtils.isBlank(this.groupId)){
197 SequenceAccessorService sas = getSequenceAccessorService();
198 Long nextSeq = sas.getNextAvailableSequenceNumber(
199 KimConstants.SequenceNames.KRIM_GROUP_ID_S, this.getClass());
200 this.groupId = nextSeq.toString();
201 }
202 if(StringUtils.isBlank(this.groupTypeId)) {
203 this.groupTypeId = "1";
204 }
205 }
206
207 public String getGroupId(){
208
209
210
211 return groupId;
212 }
213
214
215
216
217 public void setGroupId(String groupId) {
218 this.groupId = groupId;
219 }
220
221
222
223
224 public String getGroupName() {
225 return this.groupName;
226 }
227
228
229
230
231 public void setGroupName(String groupName) {
232 this.groupName = groupName;
233 }
234
235 public String getGroupDescription() {
236 return this.groupDescription;
237 }
238
239 public void setGroupDescription(String groupDescription) {
240 this.groupDescription = groupDescription;
241 }
242
243
244
245
246 public String getGroupNamespace() {
247 return this.groupNamespace;
248 }
249
250
251
252
253 public void setGroupNamespace(String groupNamespace) {
254 this.groupNamespace = groupNamespace;
255 }
256
257
258
259
260 public String getGroupTypeId() {
261 return this.groupTypeId;
262 }
263
264
265
266
267 public void setGroupTypeId(String groupTypeId) {
268 this.groupTypeId = groupTypeId;
269 }
270
271
272
273
274 public String getGroupTypeName() {
275 return this.groupTypeName;
276 }
277
278
279
280
281 public void setGroupTypeName(String groupTypeName) {
282 this.groupTypeName = groupTypeName;
283 }
284
285
286
287
288 public List<GroupDocumentMember> getMembers() {
289 return this.members;
290 }
291
292
293
294
295 public void setMembers(List<GroupDocumentMember> members) {
296 this.members = members;
297 }
298
299
300
301
302 public List<GroupDocumentQualifier> getQualifiers() {
303 return this.qualifiers;
304 }
305
306
307
308
309 public void setQualifiers(List<GroupDocumentQualifier> qualifiers) {
310 this.qualifiers = qualifiers;
311 }
312
313 public GroupDocumentQualifier getQualifier(String kimAttributeDefnId) {
314 for(GroupDocumentQualifier qualifier: qualifiers){
315 if(qualifier.getKimAttrDefnId().equals(kimAttributeDefnId))
316 return qualifier;
317 }
318 return null;
319 }
320
321 public Map<String, String> getQualifiersAsAttributes() {
322 Map<String, String> attributes = new HashMap<String, String>();
323 for(GroupDocumentQualifier qualifier: qualifiers){
324 if ( qualifier.getKimAttribute() != null ) {
325 attributes.put(qualifier.getKimAttribute().getAttributeName(), qualifier.getAttrVal());
326 } else {
327 LOG.warn( "Unknown attribute ID on group: " + qualifier.getKimAttrDefnId() + " / value=" + qualifier.getAttrVal());
328 attributes.put("Unknown Attribute ID: " + qualifier.getKimAttrDefnId(), qualifier.getAttrVal());
329 }
330 }
331 return attributes;
332 }
333
334 public void setDefinitions(List<KimAttributeField> definitions) {
335 super.setDefinitions(definitions);
336 if(getQualifiers()==null || getQualifiers().size()<1){
337 GroupDocumentQualifier qualifier;
338 setQualifiers(new ArrayList<GroupDocumentQualifier>());
339 if(getDefinitions()!=null){
340 for(KimAttributeField key : getDefinitions()) {
341 qualifier = new GroupDocumentQualifier();
342 qualifier.setKimAttrDefnId(getKimAttributeDefnId(key));
343 getQualifiers().add(qualifier);
344 }
345 }
346 }
347 }
348
349
350
351
352 public boolean isEditing() {
353 return this.editing;
354 }
355
356
357
358
359 public void setEditing(boolean editing) {
360 this.editing = editing;
361 }
362
363 public void setKimType(KimType kimType) {
364 super.setKimType(kimType);
365 if (kimType != null){
366 setGroupTypeId(kimType.getId());
367 setGroupTypeName(kimType.getName());
368 }
369 }
370 }