1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kim.impl.group;
17
18 import org.joda.time.DateTime;
19 import org.kuali.rice.kim.api.KimConstants;
20 import org.kuali.rice.kim.api.group.Group;
21 import org.kuali.rice.kim.api.identity.Person;
22 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
23 import org.kuali.rice.kim.impl.common.attribute.KimAttributeDataBo;
24 import org.kuali.rice.krad.data.jpa.PortableSequenceGenerator;
25
26 import javax.persistence.Cacheable;
27 import javax.persistence.CascadeType;
28 import javax.persistence.Column;
29 import javax.persistence.Entity;
30 import javax.persistence.GeneratedValue;
31 import javax.persistence.Id;
32 import javax.persistence.JoinColumn;
33 import javax.persistence.OneToMany;
34 import javax.persistence.Table;
35 import javax.persistence.Transient;
36 import java.util.ArrayList;
37 import java.util.List;
38 import java.util.Map;
39
40 @Cacheable(false)
41 @Entity
42 @Table(name = "KRIM_GRP_T")
43 public class GroupBo extends GroupBase {
44
45 private static final long serialVersionUID = 1L;
46
47 @PortableSequenceGenerator(name = "KRIM_GRP_ID_S")
48 @GeneratedValue(generator = "KRIM_GRP_ID_S")
49 @Id
50 @Column(name = "GRP_ID")
51 private String id;
52
53 @OneToMany(targetEntity = GroupMemberBo.class, orphanRemoval = true, cascade = { CascadeType.REFRESH, CascadeType.REMOVE, CascadeType.PERSIST })
54 @JoinColumn(name = "GRP_ID", referencedColumnName = "GRP_ID", insertable = false, updatable = false)
55 private List<GroupMemberBo> members;
56
57 @OneToMany(targetEntity = GroupAttributeBo.class, orphanRemoval = true, cascade = { CascadeType.REFRESH, CascadeType.REMOVE, CascadeType.PERSIST })
58 @JoinColumn(name = "GRP_ID", referencedColumnName = "GRP_ID" )
59 private List<GroupAttributeBo> attributeDetails;
60
61 @Transient
62 private List<Person> memberPersons;
63
64 @Transient
65 private List<Group> memberGroups;
66
67 @Override
68 public Map<String, String> getAttributes() {
69 return attributeDetails != null ? KimAttributeDataBo.toAttributes(attributeDetails) : attributes;
70 }
71
72 @Override
73 public String getId() {
74 return id;
75 }
76
77 public void setId(String id) {
78 this.id = id;
79 }
80
81 public List<GroupMemberBo> getMembers() {
82 return members;
83 }
84
85 public void setMembers(List<GroupMemberBo> members) {
86 this.members = members;
87 }
88
89 public List<GroupAttributeBo> getAttributeDetails() {
90 return attributeDetails;
91 }
92
93 public void setAttributeDetails(List<GroupAttributeBo> attributeDetails) {
94 this.attributeDetails = attributeDetails;
95 }
96
97
98
99
100
101
102 public static Group to(GroupBo bo) {
103 if (bo == null) {
104 return null;
105 }
106 return Group.Builder.create(bo).build();
107 }
108
109
110
111
112
113
114 public static GroupBo from(Group im) {
115 if (im == null) {
116 return null;
117 }
118 GroupBo bo = new GroupBo();
119 bo.setId(im.getId());
120 bo.setNamespaceCode(im.getNamespaceCode());
121 bo.setName(im.getName());
122 bo.setDescription(im.getDescription());
123 bo.setActive(im.isActive());
124 bo.setKimTypeId(im.getKimTypeId());
125 bo.setAttributes(im.getAttributes());
126 bo.setVersionNumber(im.getVersionNumber());
127 bo.setObjectId(im.getObjectId());
128 return bo;
129 }
130
131
132 public String getGroupAttributeValueById(String attributeId) {
133 for (GroupAttributeBo gad : getAttributeDetails()) {
134 if (gad.getKimAttributeId().equals(attributeId.trim())) {
135 return gad.getAttributeValue();
136 }
137 }
138 return null;
139 }
140
141 private void splitMembersToTypes() {
142 memberPersons = new ArrayList<Person>();
143 memberGroups = new ArrayList<Group>();
144 if (getMembers() != null) {
145 for (GroupMemberBo groupMember : getMembers()) {
146 if (groupMember.isActive(new DateTime())) {
147 if (KimConstants.KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE.equals(groupMember.getType())) {
148 Person tempPerson = KimApiServiceLocator.getPersonService().getPerson(groupMember.getMemberId());
149 if (tempPerson != null && tempPerson.isActive()) {
150 memberPersons.add(tempPerson);
151 }
152 } else if (KimConstants.KimGroupMemberTypes.GROUP_MEMBER_TYPE.equals(groupMember.getType())) {
153 Group tempGroup = KimApiServiceLocator.getGroupService().getGroup(groupMember.getMemberId());
154 if (tempGroup != null && tempGroup.isActive()) {
155 memberGroups.add(tempGroup);
156 }
157 }
158 }
159 }
160 }
161 }
162
163 public List<Person> getMemberPersons() {
164 if (this.memberPersons == null) {
165 splitMembersToTypes();
166 }
167 return this.memberPersons;
168 }
169
170 public void setMemberPersons(List<Person> memberPersons) {
171 this.memberPersons = memberPersons;
172 }
173
174 public List<String> getMemberPrincipalIds() {
175 List<String> principalIds = new ArrayList<String>();
176 if (getMembers() != null) {
177 for (GroupMemberBo groupMember : getMembers()) {
178 if (groupMember.isActive(new DateTime())) {
179 if (KimConstants.KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE.equals(groupMember.getType())) {
180 principalIds.add(groupMember.getMemberId());
181 }
182 }
183 }
184 }
185 return principalIds;
186 }
187
188 public List<String> getMemberGroupIds() {
189 List<String> principalIds = new ArrayList<String>();
190 if (getMembers() != null) {
191 for (GroupMemberBo groupMember : getMembers()) {
192 if (groupMember.isActive(new DateTime())) {
193 if (KimConstants.KimGroupMemberTypes.GROUP_MEMBER_TYPE.equals(groupMember.getType())) {
194 principalIds.add(groupMember.getMemberId());
195 }
196 }
197 }
198 }
199 return principalIds;
200 }
201
202 public List<Group> getMemberGroups() {
203 if (this.memberGroups == null) {
204 splitMembersToTypes();
205 }
206 return this.memberGroups;
207 }
208
209 public void setMemberGroups(List<Group> memberGroups) {
210 this.memberGroups = memberGroups;
211 }
212 }