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 }