001 /** 002 * Copyright 2005-2014 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.kcb.bo; 017 018 import java.sql.Timestamp; 019 020 import javax.persistence.Basic; 021 import javax.persistence.Column; 022 import javax.persistence.Entity; 023 import javax.persistence.FetchType; 024 import javax.persistence.GeneratedValue; 025 import javax.persistence.Id; 026 import javax.persistence.Lob; 027 import javax.persistence.Table; 028 import javax.persistence.Version; 029 030 import org.apache.commons.lang.StringUtils; 031 import org.apache.commons.lang.builder.ToStringBuilder; 032 import org.kuali.rice.krad.data.jpa.PortableSequenceGenerator; 033 034 /** 035 * This class represents an abstract message that has been sent to a single user 036 * recipient and may result in several {@link MessageDelivery}s. 037 * @author Kuali Rice Team (rice.collab@kuali.org) 038 */ 039 // this class could possibly just extend the MessageDTO 040 @Entity 041 @Table(name="KREN_MSG_T") 042 public class Message { 043 /** 044 * Field names 045 */ 046 public static final String ID_FIELD = "id"; 047 public static final String ORIGINID_FIELD = "originId"; 048 049 @Id 050 @GeneratedValue(generator="KREN_MSG_S") 051 @PortableSequenceGenerator(name="KREN_MSG_S") 052 @Column(name="MSG_ID") 053 private Long id; 054 /** 055 * The origin id is an id provided by the originating system that creates the message 056 */ 057 @Column(name="ORGN_ID", nullable=false) 058 private String originId; 059 @Column(name="DELIV_TYP", nullable=false) 060 private String deliveryType; 061 @Column(name="CHNL", nullable=false) 062 private String channel; 063 @Column(name="PRODCR", nullable=true) 064 private String producer; 065 @Column(name="CRTE_DTTM", nullable=false) 066 private Timestamp creationDateTime = new Timestamp(System.currentTimeMillis()); 067 @Column(name="TTL", nullable=true) 068 private String title; 069 @Lob 070 @Basic(fetch=FetchType.LAZY) 071 @Column(name="CNTNT", nullable=false) 072 private String content; 073 @Column(name="CNTNT_TYP", nullable=true) 074 private String contentType; 075 @Column(name="URL", nullable=true) 076 private String url; 077 @Column(name="RECIP_ID", nullable=false) 078 private String recipient; 079 080 /** 081 * Lock column for OJB optimistic locking 082 */ 083 @Version 084 @Column(name="VER_NBR") 085 private Integer lockVerNbr; 086 087 /** 088 * Normal no-arg constructor 089 */ 090 public Message() {} 091 092 /** 093 * Shallow-copy constructor 094 * @param m Message object to (shallow) copy 095 */ 096 public Message(Message m) { 097 this.id = m.id; 098 this.channel = m.channel; 099 this.content = m.content; 100 this.contentType = m.contentType; 101 this.creationDateTime = m.creationDateTime; 102 this.deliveryType = m.deliveryType; 103 this.lockVerNbr = m.lockVerNbr; 104 this.producer = m.producer; 105 this.recipient = m.recipient; 106 this.title = m.title; 107 } 108 109 /** 110 * Gets the id attribute. 111 * @return Returns the id. 112 */ 113 public Long getId() { 114 return id; 115 } 116 117 /** 118 * Sets the id attribute value. 119 * @param id The id to set. 120 */ 121 public void setId(Long id) { 122 this.id = id; 123 } 124 125 /** 126 * Gets the origin id 127 * @return the origin id 128 */ 129 public String getOriginId() { 130 return this.originId; 131 } 132 133 /** 134 * Sets the origin id 135 * @param originId the origin id 136 */ 137 public void setOriginId(String originId) { 138 this.originId = originId; 139 } 140 141 /** 142 * Returns when this Notification entry was created 143 * @return when this Notification entry was created 144 */ 145 public Timestamp getCreationDateTime() { 146 return creationDateTime; 147 } 148 149 /** 150 * Sets the creation date of this Notification entry 151 * @param created the creation date of this Notification entry 152 */ 153 public void setCreationDateTime(Timestamp created) { 154 this.creationDateTime = created; 155 } 156 157 /** 158 * Return value of lock column for OJB optimistic locking 159 * @return value of lock column for OJB optimistic locking 160 */ 161 public Integer getLockVerNbr() { 162 return lockVerNbr; 163 } 164 165 /** 166 * Set value of lock column for OJB optimistic locking 167 * @param lockVerNbr value of lock column for OJB optimistic locking 168 */ 169 public void setLockVerNbr(Integer lockVerNbr) { 170 this.lockVerNbr = lockVerNbr; 171 } 172 173 /** 174 * Gets the recipient attribute. 175 * @return Returns the recipient. 176 */ 177 public String getRecipient() { 178 return recipient; 179 } 180 181 /** 182 * Sets the recipient attribute value. 183 * @param recipients The recipient to set. 184 */ 185 public void setRecipient(String recipient) { 186 this.recipient = recipient; 187 } 188 189 /** 190 * Gets the content attribute. 191 * @return Returns the content. 192 */ 193 public String getContent() { 194 return content; 195 } 196 197 /** 198 * Sets the content attribute value. 199 * @param content The content to set. 200 */ 201 public void setContent(String content) { 202 this.content = content; 203 } 204 205 /** 206 * Gets the contentType attribute. 207 * @return Returns the contentType. 208 */ 209 public String getContentType() { 210 return contentType; 211 } 212 213 /** 214 * Sets the contentType attribute value. 215 * @param contentType The contentType to set. 216 */ 217 public void setContentType(String contentType) { 218 this.contentType = contentType; 219 } 220 221 /** 222 * @return the url 223 */ 224 public String getUrl() { 225 return this.url; 226 } 227 228 /** 229 * @param url the url 230 */ 231 public void setUrl(String url) { 232 this.url = url; 233 } 234 235 /** 236 * Gets the deliveryType attribute. 237 * @return Returns the deliveryType. 238 */ 239 public String getDeliveryType() { 240 return deliveryType; 241 } 242 243 /** 244 * Sets the deliveryType attribute value. 245 * @param deliveryType The deliveryType to set. 246 */ 247 public void setDeliveryType(String deliveryType) { 248 this.deliveryType = deliveryType.toUpperCase(); 249 } 250 251 /** 252 * Gets the title 253 * @return the title of this notification 254 */ 255 public String getTitle() { 256 return title; 257 } 258 259 /** 260 * Sets the title 261 * @param title the title of this notification 262 */ 263 public void setTitle(String title) { 264 this.title = title; 265 } 266 267 /** 268 * Gets the channel 269 * @return the channel 270 */ 271 public String getChannel() { 272 return this.channel; 273 } 274 275 /** 276 * Sets the channel 277 * @param channel the channel 278 */ 279 public void setChannel(String channel) { 280 this.channel = channel; 281 } 282 283 /** 284 * Gets the producer 285 * @return the producer 286 */ 287 public String getProducer() { 288 return this.producer; 289 } 290 291 /** 292 * Sets the producer 293 * @param producer the producer 294 */ 295 public void setProducer(String producer) { 296 this.producer = producer; 297 } 298 299 /** 300 * @see java.lang.Object#toString() 301 */ 302 @Override 303 public String toString() { 304 return new ToStringBuilder(this) 305 .append("id", id) 306 .append("creationDateTime", creationDateTime) 307 .append("deliveryType", deliveryType) 308 .append("recipient", recipient) 309 .append("title", title) 310 .append("channel", channel) 311 .append("producer", producer) 312 .append("content", StringUtils.abbreviate(content, 100)) 313 .append("contentType", contentType) 314 .append("lockVerNbr", lockVerNbr) 315 .toString(); 316 } 317 318 }