001 /* 002 * Copyright 2007 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.lang.StringUtils; 019 import org.hibernate.annotations.GenericGenerator; 020 import org.hibernate.annotations.Parameter; 021 import org.kuali.rice.ken.util.NotificationConstants; 022 import org.kuali.rice.kns.bo.PersistableBusinessObjectBase; 023 024 import javax.persistence.*; 025 import java.sql.Timestamp; 026 import java.util.ArrayList; 027 import java.util.List; 028 029 /** 030 * This class represents an instace of a notification message that is received by the overall 031 * system. 032 * @author Kuali Rice Team (rice.collab@kuali.org) 033 */ 034 @Entity 035 @Table(name="KREN_NTFCTN_T") 036 public class Notification extends PersistableBusinessObjectBase implements Lockable { 037 038 @Id 039 @GeneratedValue(generator="KREN_NTFCTN_S") 040 @GenericGenerator(name="KREN_NTFCTN_S",strategy="org.hibernate.id.enhanced.SequenceStyleGenerator",parameters={ 041 @Parameter(name="sequence_name",value="KREN_NTFCTN_S"), 042 @Parameter(name="value_column",value="id") 043 }) 044 @Column(name="NTFCTN_ID") 045 private Long id; 046 @Column(name="DELIV_TYP", nullable=false) 047 private String deliveryType; 048 @Column(name="CRTE_DTTM", nullable=false) 049 private Timestamp creationDateTime; 050 @Column(name="SND_DTTM", nullable=true) 051 private Timestamp sendDateTime; 052 @Column(name="AUTO_RMV_DTTM", nullable=true) 053 private Timestamp autoRemoveDateTime; 054 @Column(name="TTL", nullable=true) 055 private String title; 056 @Lob 057 @Basic(fetch=FetchType.LAZY) 058 @Column(name="CNTNT", nullable=false) 059 private String content; 060 @Column(name="PROCESSING_FLAG", nullable=false) 061 private String processingFlag; 062 @Column(name="LOCKD_DTTM", nullable=true) 063 private Timestamp lockedDate; 064 /** 065 * Lock column for OJB optimistic locking 066 */ 067 // @Version 068 // @Column(name="VER_NBR") 069 // private Integer lockVerNbr; 070 071 // object references 072 @OneToOne(fetch=FetchType.EAGER, cascade={CascadeType.REFRESH, CascadeType.DETACH}) 073 @JoinColumn(name="PRIO_ID") 074 private NotificationPriority priority; 075 @OneToOne(fetch=FetchType.EAGER, cascade={CascadeType.REFRESH, CascadeType.DETACH}) 076 @JoinColumn(name="CNTNT_TYP_ID") 077 private NotificationContentType contentType; 078 @OneToOne(fetch=FetchType.EAGER, cascade={CascadeType.REFRESH, CascadeType.DETACH}) 079 @JoinColumn(name="CHNL_ID") 080 private NotificationChannel channel; 081 @OneToOne(fetch=FetchType.EAGER, cascade={CascadeType.REFRESH, CascadeType.DETACH}) 082 @JoinColumn(name="PRODCR_ID") 083 private NotificationProducer producer; 084 085 // lists 086 @OneToMany(cascade={CascadeType.ALL}, 087 targetEntity=org.kuali.rice.ken.bo.NotificationRecipient.class, mappedBy="notification") 088 @OrderBy("id ASC") 089 private List<NotificationRecipient> recipients; 090 @OneToMany(cascade={CascadeType.ALL}, 091 targetEntity=org.kuali.rice.ken.bo.NotificationSender.class, mappedBy="notification") 092 @OrderBy("id ASC") 093 private List<NotificationSender> senders; 094 095 /** 096 * Constructs a Notification instance. 097 */ 098 public Notification() { 099 recipients = new ArrayList<NotificationRecipient>(); 100 senders = new ArrayList<NotificationSender>(); 101 processingFlag = NotificationConstants.PROCESSING_FLAGS.UNRESOLVED; 102 } 103 104 /** 105 * Returns when this Notification entry was created 106 * @return when this Notification entry was created 107 */ 108 public Timestamp getCreationDateTime() { 109 return creationDateTime; 110 } 111 112 /** 113 * Sets the creation date of this Notification entry 114 * @param created the creation date of this Notification entry 115 */ 116 public void setCreationDateTime(Timestamp created) { 117 this.creationDateTime = created; 118 } 119 120 /** 121 * Return value of lock column for OJB optimistic locking 122 * @return value of lock column for OJB optimistic locking 123 */ 124 // should discard this method and call super directly 125 public Integer getLockVerNbr() { 126 return Integer.valueOf(super.getVersionNumber().intValue()); 127 } 128 129 /** 130 * Set value of lock column for OJB optimistic locking 131 * @param lockVerNbr value of lock column for OJB optimistic locking 132 */ 133 // should discard this method and call super directly 134 public void setLockVerNbr(Integer lockVerNbr) { 135 super.setVersionNumber(lockVerNbr.longValue()); 136 } 137 138 /** 139 * Gets the recipients attribute. 140 * @return Returns the recipients. 141 */ 142 public List<NotificationRecipient> getRecipients() { 143 return recipients; 144 } 145 146 /** 147 * Sets the recipients attribute value. 148 * @param recipients The recipients to set. 149 */ 150 public void setRecipients(List<NotificationRecipient> recipients) { 151 this.recipients = recipients; 152 } 153 154 /** 155 * Retrieves a recipient at the specified index 156 * @param index the index in the recipients collection 157 * @return the recipient if found or null 158 */ 159 public NotificationRecipient getRecipient(int index) { 160 return (NotificationRecipient) recipients.get(index); 161 } 162 163 /** 164 * Adds a recipient 165 * @param recipient The recipient to add 166 */ 167 public void addRecipient(NotificationRecipient recipient) { 168 recipients.add(recipient); 169 } 170 171 /** 172 * Gets the senders attribute. 173 * @return Returns the senders. 174 */ 175 public List<NotificationSender> getSenders() { 176 return senders; 177 } 178 179 /** 180 * Sets the senders attribute value. 181 * @param senders The senders to set. 182 */ 183 public void setSenders(List<NotificationSender> senders) { 184 this.senders = senders; 185 } 186 187 /** 188 * Retrieves a sender at the specified index 189 * @param index the index in the senders collection 190 * @return the sender if found or null 191 */ 192 public NotificationSender getSender(int index) { 193 return (NotificationSender) senders.get(index); 194 } 195 /** 196 * Adds a sender 197 * @param sender The sender to add 198 */ 199 public void addSender(NotificationSender sender) { 200 senders.add(sender); 201 } 202 203 /** 204 * Gets the autoRemoveDateTime attribute. 205 * @return Returns the autoRemoveDateTime. 206 */ 207 public Timestamp getAutoRemoveDateTime() { 208 return autoRemoveDateTime; 209 } 210 211 /** 212 * Sets the autoRemoveDateTime attribute value. 213 * @param autoRemoveDateTime The autoRemoveDateTime to set. 214 */ 215 public void setAutoRemoveDateTime(Timestamp autoRemoveDateTime) { 216 this.autoRemoveDateTime = autoRemoveDateTime; 217 } 218 219 /** 220 * Gets the channel attribute. 221 * @return Returns the channel. 222 */ 223 public NotificationChannel getChannel() { 224 return channel; 225 } 226 227 /** 228 * Sets the channel attribute value. 229 * @param channel The channel to set. 230 */ 231 public void setChannel(NotificationChannel channel) { 232 this.channel = channel; 233 } 234 235 /** 236 * Gets the content attribute. 237 * @return Returns the content. 238 */ 239 public String getContent() { 240 return content; 241 } 242 243 /** 244 * Sets the content attribute value. 245 * @param content The content to set. 246 */ 247 public void setContent(String content) { 248 this.content = content; 249 } 250 251 /** 252 * Gets the contentType attribute. 253 * @return Returns the contentType. 254 */ 255 public NotificationContentType getContentType() { 256 return contentType; 257 } 258 259 /** 260 * Sets the contentType attribute value. 261 * @param contentType The contentType to set. 262 */ 263 public void setContentType(NotificationContentType contentType) { 264 this.contentType = contentType; 265 } 266 267 /** 268 * Gets the deliveryType attribute. 269 * @return Returns the deliveryType. 270 */ 271 public String getDeliveryType() { 272 return deliveryType; 273 } 274 275 /** 276 * Sets the deliveryType attribute value. 277 * @param deliveryType The deliveryType to set. 278 */ 279 public void setDeliveryType(String deliveryType) { 280 this.deliveryType = deliveryType.toUpperCase(); 281 } 282 283 /** 284 * Gets the id attribute. 285 * @return Returns the id. 286 */ 287 public Long getId() { 288 return id; 289 } 290 291 /** 292 * Sets the id attribute value. 293 * @param id The id to set. 294 */ 295 public void setId(Long id) { 296 this.id = id; 297 } 298 299 /** 300 * Gets the priority attribute. 301 * @return Returns the priority. 302 */ 303 public NotificationPriority getPriority() { 304 return priority; 305 } 306 307 /** 308 * Sets the priority attribute value. 309 * @param priority The priority to set. 310 */ 311 public void setPriority(NotificationPriority priority) { 312 this.priority = priority; 313 } 314 315 /** 316 * Gets the producer attribute. 317 * @return Returns the producer. 318 */ 319 public NotificationProducer getProducer() { 320 return producer; 321 } 322 323 /** 324 * Sets the producer attribute value. 325 * @param producer The producer to set. 326 */ 327 public void setProducer(NotificationProducer producer) { 328 this.producer = producer; 329 } 330 331 /** 332 * Gets the sendDateTime attribute. 333 * @return Returns the sendDateTime. 334 */ 335 public Timestamp getSendDateTime() { 336 return sendDateTime; 337 } 338 339 /** 340 * Sets the sendDateTime attribute value. 341 * @param sendDateTime The sendDateTime to set. 342 */ 343 public void setSendDateTime(Timestamp sendDateTime) { 344 this.sendDateTime = sendDateTime; 345 } 346 347 /** 348 * Gets the processingFlag attribute. 349 * @return Returns the processingFlag. 350 */ 351 public String getProcessingFlag() { 352 return processingFlag; 353 } 354 355 /** 356 * Sets the processingFlag attribute value. 357 * @param processingFlag The processingFlag to set. 358 */ 359 public void setProcessingFlag(String processingFlag) { 360 this.processingFlag = processingFlag; 361 } 362 363 /** 364 * Gets the lockedDate attribute. 365 * @return Returns the lockedDate. 366 */ 367 public Timestamp getLockedDate() { 368 return lockedDate; 369 } 370 371 /** 372 * Sets the lockedDate attribute value. 373 * @param lockedDate The lockedDate to set. 374 */ 375 public void setLockedDate(Timestamp lockedDate) { 376 this.lockedDate = lockedDate; 377 } 378 379 /** 380 * Gets the title 381 * @return the title of this notification 382 */ 383 public String getTitle() { 384 return title; 385 } 386 387 /** 388 * Sets the title 389 * @param title the title of this notification 390 */ 391 public void setTitle(String title) { 392 this.title = title; 393 } 394 395 /** 396 * This method just uses StringUtils to get at the content of the <message> tag 397 * that exists in the notification content. 398 * @return String 399 */ 400 public String getContentMessage() { 401 return StringUtils.substringBetween(content, NotificationConstants.XML_MESSAGE_CONSTANTS.MESSAGE_OPEN, NotificationConstants.XML_MESSAGE_CONSTANTS.MESSAGE_CLOSE); 402 } 403 }