001    /**
002     * Copyright 2005-2012 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.ken.bo;
017    
018    import org.hibernate.annotations.GenericGenerator;
019    import org.hibernate.annotations.Parameter;
020    import org.kuali.rice.ken.api.notification.NotificationListRecipient;
021    import org.kuali.rice.ken.api.notification.NotificationListRecipientContract;
022    import org.kuali.rice.ken.api.notification.NotificationProducer;
023    import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
024    
025    import javax.persistence.*;
026    
027    /**
028     * This class represents the data structure that will house a default recipient list for a notification channel.
029     * @author Kuali Rice Team (rice.collab@kuali.org)
030     */
031    @Entity
032    @Table(name="KREN_RECIP_LIST_T")
033    public class NotificationRecipientListBo extends PersistableBusinessObjectBase implements NotificationListRecipientContract {
034        @Id
035        @GeneratedValue(generator="KREN_RECIP_LIST_S")
036            @GenericGenerator(name="KREN_RECIP_LIST_S",strategy="org.hibernate.id.enhanced.SequenceStyleGenerator",parameters={
037                            @Parameter(name="sequence_name",value="KREN_RECIP_LIST_S"),
038                            @Parameter(name="value_column",value="id")
039            })
040            @Column(name="RECIP_LIST_ID")
041            private Long id;
042        @Column(name="RECIP_TYP_CD", nullable=false)
043            private String recipientType;
044        @Column(name="RECIP_ID", nullable=false)
045            private String recipientId;
046        
047        @ManyToOne(fetch=FetchType.EAGER, cascade={CascadeType.REFRESH, CascadeType.MERGE})
048            @JoinColumn(name="CHNL_ID", insertable=false, updatable=false)
049            private NotificationChannelBo channel;
050        
051        /**
052         * Constructs a NotificationRecipientList.java instance.
053         */
054        public NotificationRecipientListBo() {
055        }
056    
057        /**
058         * Gets the channel attribute. 
059         * @return Returns the channel.
060         */
061        public NotificationChannelBo getChannel() {
062            return channel;
063        }
064    
065    
066        /**
067         * Sets the channel attribute value.
068         * @param channel The channel to set.
069         */
070        public void setChannel(NotificationChannelBo channel) {
071            this.channel = channel;
072        }
073    
074        /**
075         * Gets the id attribute. 
076         * @return Returns the id.
077         */
078        public Long getId() {
079            return id;
080        }
081    
082        /**
083         * Sets the id attribute value.
084         * @param id The id to set.
085         */
086        public void setId(Long id) {
087            this.id = id;
088        }
089    
090        /**
091         * Gets the recipientId attribute. 
092         * @return Returns the recipientId.
093         */
094        public String getRecipientId() {
095            return recipientId;
096        }
097    
098        /**
099         * Sets the recipientId attribute value.
100         * @param recipientId The recipientId to set.
101         */
102        public void setRecipientId(String recipientId) {
103            this.recipientId = recipientId;
104        }
105    
106        /**
107         * Gets the recipientType attribute. 
108         * @return Returns the recipientType.
109         */
110        public String getRecipientType() {
111            return recipientType;
112        }
113    
114        /**
115         * Sets the recipientType attribute value.
116         * @param recipientType The recipientType to set.
117         */
118        public void setRecipientType(String recipientType) {
119            this.recipientType = recipientType;
120        }
121    
122        /**
123         * Converts a mutable bo to its immutable counterpart
124         * @param bo the mutable business object
125         * @return the immutable object
126         */
127        public static NotificationListRecipient to(NotificationRecipientListBo bo) {
128            if (bo == null) {
129                return null;
130            }
131    
132            return NotificationListRecipient.Builder.create(bo).build();
133        }
134    
135        /**
136         * Converts a immutable object to its mutable counterpart
137         * @param im immutable object
138         * @return the mutable bo
139         */
140        public static NotificationRecipientListBo from(NotificationListRecipient im) {
141            if (im == null) {
142                return null;
143            }
144    
145            NotificationRecipientListBo bo = new NotificationRecipientListBo();
146            bo.setId(im.getId());
147            bo.setVersionNumber(im.getVersionNumber());
148            bo.setObjectId(im.getObjectId());
149    
150            bo.setRecipientType(im.getRecipientType());
151            bo.setRecipientId(im.getRecipientId());
152    
153            bo.setChannel(im.getChannel() == null ? null : NotificationChannelBo.from(im.getChannel()));
154            return bo;
155        }
156    }
157