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    }