001/**
002 * Copyright 2005-2016 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 */
016package org.kuali.rice.kim.impl.common.delegate;
017
018import org.eclipse.persistence.annotations.JoinFetch;
019import org.eclipse.persistence.annotations.JoinFetchType;
020import org.kuali.rice.core.api.delegation.DelegationType;
021import org.kuali.rice.kim.api.common.delegate.DelegateMember;
022import org.kuali.rice.kim.api.common.delegate.DelegateType;
023import org.kuali.rice.kim.api.common.delegate.DelegateTypeContract;
024import org.kuali.rice.krad.bo.DataObjectBase;
025import org.kuali.rice.krad.data.jpa.PortableSequenceGenerator;
026import org.kuali.rice.krad.data.jpa.converters.BooleanYNConverter;
027import org.springframework.util.AutoPopulatingList;
028
029import javax.persistence.CascadeType;
030import javax.persistence.Column;
031import javax.persistence.Convert;
032import javax.persistence.Entity;
033import javax.persistence.GeneratedValue;
034import javax.persistence.Id;
035import javax.persistence.JoinColumn;
036import javax.persistence.OneToMany;
037import javax.persistence.Table;
038import java.util.ArrayList;
039import java.util.List;
040
041@Entity
042@Table(name = "KRIM_DLGN_T")
043public class DelegateTypeBo extends DataObjectBase implements DelegateTypeContract {
044
045    private static final long serialVersionUID = 1L;
046
047    @PortableSequenceGenerator(name = "KRIM_DLGN_ID_S")
048    @GeneratedValue(generator = "KRIM_DLGN_ID_S")
049    @Id
050    @Column(name = "DLGN_ID")
051    private String delegationId;
052
053    @Column(name = "ROLE_ID")
054    private String roleId;
055
056    @Column(name = "ACTV_IND")
057    @Convert(converter = BooleanYNConverter.class)
058    private boolean active = true;
059
060    @Column(name = "KIM_TYP_ID")
061    private String kimTypeId;
062
063    @Column(name = "DLGN_TYP_CD")
064    private String delegationTypeCode;
065
066    @JoinFetch(value = JoinFetchType.OUTER)
067    @OneToMany(targetEntity = DelegateMemberBo.class, orphanRemoval = true, cascade = CascadeType.ALL)
068    @JoinColumn(name = "DLGN_ID", referencedColumnName = "DLGN_ID")
069    private List<DelegateMemberBo> members = new AutoPopulatingList<DelegateMemberBo>(DelegateMemberBo.class);
070
071    public void setDelegationType(DelegationType type) {
072        this.delegationTypeCode = type.getCode();
073    }
074
075    @Override
076    public DelegationType getDelegationType() {
077        return DelegationType.fromCode(this.delegationTypeCode);
078    }
079
080    public static DelegateType to(DelegateTypeBo bo) {
081        return DelegateType.Builder.create(bo).build();
082    }
083
084    public static DelegateTypeBo from(DelegateType immutable) {
085        // build list of DelegateMemberBo                      
086        ArrayList<DelegateMemberBo> tmpMembers = new ArrayList<DelegateMemberBo>();
087        for (DelegateMember member : immutable.getMembers()) {
088            tmpMembers.add(DelegateMemberBo.from(member));
089        }
090        DelegateTypeBo bo = new DelegateTypeBo();
091        bo.setDelegationId(immutable.getDelegationId());
092        bo.setRoleId(immutable.getRoleId());
093        bo.setActive(immutable.isActive());
094        bo.setKimTypeId(immutable.getKimTypeId());
095        bo.setDelegationTypeCode(immutable.getDelegationType().getCode());
096        bo.setMembers(tmpMembers);
097        return bo;
098    }
099
100    @Override
101    public String getDelegationId() {
102        return delegationId;
103    }
104
105    public void setDelegationId(String delegationId) {
106        this.delegationId = delegationId;
107    }
108
109    @Override
110    public String getRoleId() {
111        return roleId;
112    }
113
114    public void setRoleId(String roleId) {
115        this.roleId = roleId;
116    }
117
118    public boolean getActive() {
119        return active;
120    }
121
122    @Override
123    public boolean isActive() {
124        return active;
125    }
126
127    public void setActive(boolean active) {
128        this.active = active;
129    }
130
131    @Override
132    public String getKimTypeId() {
133        return kimTypeId;
134    }
135
136    public void setKimTypeId(String kimTypeId) {
137        this.kimTypeId = kimTypeId;
138    }
139
140    public String getDelegationTypeCode() {
141        return delegationTypeCode;
142    }
143
144    public void setDelegationTypeCode(String delegationTypeCode) {
145        this.delegationTypeCode = delegationTypeCode;
146    }
147
148    @Override
149    public List<DelegateMemberBo> getMembers() {
150        return members;
151    }
152
153    public void setMembers(List<DelegateMemberBo> members) {
154        this.members = members;
155    }
156}