001    /**
002     * Copyright 2005-2013 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.apache.commons.collections.CollectionUtils;
019    import org.hibernate.annotations.GenericGenerator;
020    import org.hibernate.annotations.Parameter;
021    import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
022    import org.kuali.rice.ken.api.notification.NotificationProducer;
023    import org.kuali.rice.ken.api.notification.NotificationProducerContract;
024    import org.kuali.rice.ken.service.NotificationChannelService;
025    import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
026    
027    import javax.persistence.CascadeType;
028    import javax.persistence.Column;
029    import javax.persistence.Entity;
030    import javax.persistence.FetchType;
031    import javax.persistence.GeneratedValue;
032    import javax.persistence.Id;
033    import javax.persistence.JoinColumn;
034    import javax.persistence.JoinTable;
035    import javax.persistence.ManyToMany;
036    import javax.persistence.OrderBy;
037    import javax.persistence.Table;
038    import java.util.ArrayList;
039    import java.util.List;
040    
041    /**
042     * This class represents an instance of who can actually submit notification messages to the system 
043     * for processing.
044     * @author Kuali Rice Team (rice.collab@kuali.org)
045     */
046    @Entity
047    @Table(name="KREN_PRODCR_T")
048    public class NotificationProducerBo extends PersistableBusinessObjectBase implements NotificationProducerContract {
049        @Id
050        @GeneratedValue(generator="KREN_PRODCR_S")
051            @GenericGenerator(name="KREN_PRODCR_S",strategy="org.hibernate.id.enhanced.SequenceStyleGenerator",parameters={
052                            @Parameter(name="sequence_name",value="KREN_PRODCR_S"),
053                            @Parameter(name="value_column",value="id")
054            })
055            @Column(name="PRODCR_ID")
056            private Long id;
057        @Column(name="NM", nullable=false)
058            private String name;
059        @Column(name="DESC_TXT", nullable=false)
060            private String description;
061        @Column(name="CNTCT_INFO", nullable=false)
062            private String contactInfo;
063        
064        // List references
065        @ManyToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL})@JoinTable(name="KREN_CHNL_PRODCR_T", 
066                       joinColumns=@JoinColumn(name="PRODCR_ID"), 
067                       inverseJoinColumns=@JoinColumn(name="CHNL_ID"))
068            @OrderBy("id ASC")
069            private List<NotificationChannelBo> channels;
070        
071        /**
072         * Constructs a NotificationProducer instance.
073         */
074        public NotificationProducerBo() {
075            channels = new ArrayList<NotificationChannelBo>();
076        }
077    
078        /**
079         * Gets the contactInfo attribute. 
080         * @return Returns the contactInfo.
081         */
082        public String getContactInfo() {
083            return contactInfo;
084        }
085    
086        @Override
087        public List<Long> getChannelIds() {
088            List<Long> ids = new ArrayList<Long>();
089            for (NotificationChannelBo bo : this.getChannels()) {
090                ids.add(bo.getId());
091            }
092            return ids;
093        }
094    
095        /**
096         * Sets the contactInfo attribute value.
097         * @param contactInfo The contactInfo to set.
098         */
099        public void setContactInfo(String contactInfo) {
100            this.contactInfo = contactInfo;
101        }
102    
103        /**
104         * Gets the description attribute. 
105         * @return Returns the description.
106         */
107        public String getDescription() {
108            return description;
109        }
110    
111        /**
112         * Sets the description attribute value.
113         * @param description The description to set.
114         */
115        public void setDescription(String description) {
116            this.description = description;
117        }
118    
119        /**
120         * Gets the id attribute. 
121         * @return Returns the id.
122         */
123        public Long getId() {
124            return id;
125        }
126    
127        /**
128         * Sets the id attribute value.
129         * @param id The id to set.
130         */
131        public void setId(Long id) {
132            this.id = id;
133        }
134    
135        /**
136         * Gets the name attribute. 
137         * @return Returns the name.
138         */
139        public String getName() {
140            return name;
141        }
142    
143        /**
144         * Sets the name attribute value.
145         * @param name The name to set.
146         */
147        public void setName(String name) {
148            this.name = name;
149        }
150    
151        /**
152         * Gets the channels attribute. 
153         * @return Returns the channels.
154         */
155        public List<NotificationChannelBo> getChannels() {
156            return channels;
157        }
158    
159        /**
160         * Sets the channels attribute value.
161         * @param channels The channels to set.
162         */
163        public void setChannels(List<NotificationChannelBo> channels) {
164            this.channels = channels;
165        }
166    
167        /**
168         * Converts a mutable bo to its immutable counterpart
169         * @param bo the mutable business object
170         * @return the immutable object
171         */
172        public static NotificationProducer to(NotificationProducerBo bo) {
173            if (bo == null) {
174                return null;
175            }
176    
177            return NotificationProducer.Builder.create(bo).build();
178        }
179    
180    
181        /**
182         * Converts a immutable object to its mutable counterpart
183         * @param im immutable object
184         * @return the mutable bo
185         */
186        public static NotificationProducerBo from(NotificationProducer im) {
187            if (im == null) {
188                return null;
189            }
190    
191            NotificationProducerBo bo = new NotificationProducerBo();
192            bo.setId(im.getId());
193            bo.setVersionNumber(im.getVersionNumber());
194            bo.setObjectId(im.getObjectId());
195    
196            bo.setName(im.getName());
197            bo.setDescription(im.getDescription());
198            bo.setContactInfo(im.getContactInfo());
199    
200            List<NotificationChannelBo> tempChannels = new ArrayList<NotificationChannelBo>();
201            if (CollectionUtils.isNotEmpty(im.getChannelIds())) {
202                NotificationChannelService ncs = GlobalResourceLoader.getService("notificationChannelService");
203                for (Long channelId : im.getChannelIds()) {
204                    tempChannels.add(ncs.getNotificationChannel(channelId.toString()));
205                }
206                bo.setChannels(tempChannels);
207            }
208            return bo;
209        }
210    }