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    }