001 /**
002 * Copyright 2005-2014 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.kim.impl.role;
017
018 import java.util.ArrayList;
019 import java.util.List;
020
021 import javax.persistence.CascadeType;
022 import javax.persistence.Column;
023 import javax.persistence.Convert;
024 import javax.persistence.Entity;
025 import javax.persistence.GeneratedValue;
026 import javax.persistence.Id;
027 import javax.persistence.JoinColumn;
028 import javax.persistence.OneToMany;
029 import javax.persistence.Table;
030 import javax.persistence.Transient;
031
032 import org.joda.time.DateTime;
033 import org.kuali.rice.core.api.membership.MemberType;
034 import org.kuali.rice.kim.api.role.Role;
035 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
036 import org.kuali.rice.kim.api.type.KimType;
037 import org.kuali.rice.kim.api.type.KimTypeInfoService;
038 import org.kuali.rice.kim.framework.role.RoleEbo;
039 import org.kuali.rice.kim.impl.type.KimTypeBo;
040 import org.kuali.rice.krad.bo.DataObjectBase;
041 import org.kuali.rice.krad.data.jpa.PortableSequenceGenerator;
042 import org.kuali.rice.krad.data.jpa.converters.BooleanYNConverter;
043 import org.springframework.util.AutoPopulatingList;
044
045 @Entity
046 @Table(name = "KRIM_ROLE_T")
047 public class RoleBo extends DataObjectBase implements RoleEbo {
048
049 private static final long serialVersionUID = 1L;
050
051 @PortableSequenceGenerator(name = "KRIM_ROLE_ID_S")
052 @GeneratedValue(generator = "KRIM_ROLE_ID_S")
053 @Id
054 @Column(name = "ROLE_ID")
055 private String id;
056
057 @Column(name = "ROLE_NM")
058 private String name;
059
060 @Column(name = "DESC_TXT")
061 private String description;
062
063 @Column(name = "ACTV_IND")
064 @Convert(converter = BooleanYNConverter.class)
065 private boolean active;
066
067 @Column(name = "KIM_TYP_ID")
068 private String kimTypeId;
069
070 @Column(name = "NMSPC_CD")
071 private String namespaceCode;
072
073 @OneToMany(targetEntity = RoleMemberBo.class, orphanRemoval = true, cascade = CascadeType.ALL)
074 @JoinColumn(name = "ROLE_ID", referencedColumnName = "ROLE_ID", insertable = false, updatable = false)
075 private List<RoleMemberBo> members = new AutoPopulatingList<RoleMemberBo>(RoleMemberBo.class);
076
077 @Transient
078 private String principalName;
079
080 @Transient
081 private String groupNamespaceCode;
082
083 @Transient
084 private String groupName;
085
086 @Transient
087 private String permNamespaceCode;
088
089 @Transient
090 private String permName;
091
092 @Transient
093 private String permTmplNamespaceCode;
094
095 @Transient
096 private String permTmplName;
097
098 @Transient
099 private String respNamespaceCode;
100
101 @Transient
102 private String respName;
103
104 @Transient
105 private String respTmplNamespaceCode;
106
107 @Transient
108 private String respTmplName;
109
110 @Transient
111 private transient KimTypeInfoService kimTypeInfoService;
112
113 protected List<String> getMembersOfType(String memberTypeCode) {
114 List<String> roleMembers = new ArrayList<String>();
115 for (RoleMemberBo member : getMembers()) {
116 if (member.getType().equals(MemberType.valueOf(memberTypeCode)) && member.isActive(new DateTime())) {
117 roleMembers.add(member.getMemberId());
118 }
119 }
120 return roleMembers;
121 }
122
123 public KimTypeBo getKimRoleType() {
124 if (kimTypeId == null) {
125 return null;
126 }
127 KimType type = getTypeInfoService().getKimType(kimTypeId);
128 if (type == null) {
129 return null;
130 }
131 return KimTypeBo.from(type);
132 }
133
134 protected KimTypeInfoService getTypeInfoService() {
135 if (kimTypeInfoService == null) {
136 kimTypeInfoService = KimApiServiceLocator.getKimTypeInfoService();
137 }
138 return kimTypeInfoService;
139 }
140
141 public static Role to(RoleBo bo) {
142 if (bo == null) {
143 return null;
144 }
145 return Role.Builder.create(bo).build();
146 }
147
148 public static RoleBo from(Role immutable) {
149 if (immutable == null) {
150 return null;
151 }
152 RoleBo bo = new RoleBo();
153 bo.id = immutable.getId();
154 bo.name = immutable.getName();
155 bo.namespaceCode = immutable.getNamespaceCode();
156 bo.description = immutable.getDescription();
157 bo.kimTypeId = immutable.getKimTypeId();
158 bo.active = immutable.isActive();
159 bo.setVersionNumber(immutable.getVersionNumber());
160 bo.setObjectId(immutable.getObjectId());
161 return bo;
162 }
163
164 @Override
165 public String getId() {
166 return id;
167 }
168
169 public void setId(String id) {
170 this.id = id;
171 }
172
173 @Override
174 public String getName() {
175 return name;
176 }
177
178 public void setName(String name) {
179 this.name = name;
180 }
181
182 @Override
183 public String getDescription() {
184 return description;
185 }
186
187 public void setDescription(String description) {
188 this.description = description;
189 }
190
191 public boolean getActive() {
192 return active;
193 }
194
195 @Override
196 public boolean isActive() {
197 return active;
198 }
199
200 public void setActive(boolean active) {
201 this.active = active;
202 }
203
204 @Override
205 public String getKimTypeId() {
206 return kimTypeId;
207 }
208
209 public void setKimTypeId(String kimTypeId) {
210 this.kimTypeId = kimTypeId;
211 }
212
213 @Override
214 public String getNamespaceCode() {
215 return namespaceCode;
216 }
217
218 public void setNamespaceCode(String namespaceCode) {
219 this.namespaceCode = namespaceCode;
220 }
221
222 public List<RoleMemberBo> getMembers() {
223 return members;
224 }
225
226 public void setMembers(List<RoleMemberBo> members) {
227 this.members = members;
228 }
229
230 public String getPrincipalName() {
231 return principalName;
232 }
233
234 public void setPrincipalName(String principalName) {
235 this.principalName = principalName;
236 }
237
238 public String getGroupNamespaceCode() {
239 return groupNamespaceCode;
240 }
241
242 public void setGroupNamespaceCode(String groupNamespaceCode) {
243 this.groupNamespaceCode = groupNamespaceCode;
244 }
245
246 public String getGroupName() {
247 return groupName;
248 }
249
250 public void setGroupName(String groupName) {
251 this.groupName = groupName;
252 }
253
254 public String getPermNamespaceCode() {
255 return permNamespaceCode;
256 }
257
258 public void setPermNamespaceCode(String permNamespaceCode) {
259 this.permNamespaceCode = permNamespaceCode;
260 }
261
262 public String getPermName() {
263 return permName;
264 }
265
266 public void setPermName(String permName) {
267 this.permName = permName;
268 }
269
270 public String getPermTmplNamespaceCode() {
271 return permTmplNamespaceCode;
272 }
273
274 public void setPermTmplNamespaceCode(String permTmplNamespaceCode) {
275 this.permTmplNamespaceCode = permTmplNamespaceCode;
276 }
277
278 public String getPermTmplName() {
279 return permTmplName;
280 }
281
282 public void setPermTmplName(String permTmplName) {
283 this.permTmplName = permTmplName;
284 }
285
286 public String getRespNamespaceCode() {
287 return respNamespaceCode;
288 }
289
290 public void setRespNamespaceCode(String respNamespaceCode) {
291 this.respNamespaceCode = respNamespaceCode;
292 }
293
294 public String getRespName() {
295 return respName;
296 }
297
298 public void setRespName(String respName) {
299 this.respName = respName;
300 }
301
302 public String getRespTmplNamespaceCode() {
303 return respTmplNamespaceCode;
304 }
305
306 public void setRespTmplNamespaceCode(String respTmplNamespaceCode) {
307 this.respTmplNamespaceCode = respTmplNamespaceCode;
308 }
309
310 public String getRespTmplName() {
311 return respTmplName;
312 }
313
314 public void setRespTmplName(String respTmplName) {
315 this.respTmplName = respTmplName;
316 }
317
318 @Override
319 public void refresh() {
320 }
321 }