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 }