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