001    /**
002     * Copyright 2005-2012 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 javax.persistence.CascadeType;
019    import javax.persistence.Column;
020    import javax.persistence.Entity;
021    import javax.persistence.FetchType;
022    import javax.persistence.Id;
023    import javax.persistence.JoinColumn;
024    import javax.persistence.OneToOne;
025    import javax.persistence.Table;
026    import javax.persistence.Version;
027    
028    import org.apache.commons.lang.builder.ToStringBuilder;
029    
030    /**
031     * This class represents an instance of a MessageDelivery.  A Message gets delivered to 
032     * recipients, possibly in various ways.  For each delivery type that a recipient gets sent to them, 
033     * they have an instance of this entity.
034     * @author Kuali Rice Team (rice.collab@kuali.org)
035     */
036    @Entity
037    @Table(name="KREN_MSG_DELIV_T")
038    public class MessageDelivery extends BaseLockable {
039        private static final Integer ZERO = Integer.valueOf(0);
040    
041        /**
042         * Field names
043         */
044        public static final String ID_FIELD = "id";
045        public static final String SYSTEMID_FIELD = "delivererSystemId";
046        public static final String MESSAGEID_FIELD = "message";
047        public static final String DELIVERY_STATUS = "deliveryStatus";
048        public static final String PROCESS_COUNT = "processCount";
049        
050        @Id
051            @Column(name="MSG_DELIV_ID")
052            private Long id;
053        @Column(name="TYP_NM", nullable=false)
054            private String delivererTypeName;
055        @Column(name="SYS_ID", nullable=true)
056            private String delivererSystemId;  // can hold an identifier from the endpoint deliverer mechanism system (i.e. workflow id, SMS id, etc)
057        @Column(name="STAT_CD", nullable=true)
058        private String deliveryStatus = MessageDeliveryStatus.UNDELIVERED.name();
059        @Column(name="PROC_CNT", nullable=true)
060        private Integer processCount = ZERO;
061    
062        /**
063         * This delivery's message
064         */
065        @OneToOne(fetch=FetchType.EAGER, cascade={CascadeType.PERSIST})
066            @JoinColumn(name="MSG_ID")
067            private Message message;
068    
069        /**
070         * Lock column for OJB optimistic locking
071         */
072        @Version
073            @Column(name="VER_NBR")
074            private Integer lockVerNbr;
075        
076        /**
077         * Constructs a MessageDelivery instance.
078         */
079        public MessageDelivery() {
080        }
081    
082        /**
083         * Shallow-copy constructor
084         * @param md MessageDelivery to (shallow) copy
085         */
086        public MessageDelivery(MessageDelivery md) {
087            this.id = md.id;
088            this.delivererTypeName = md.delivererTypeName;
089            this.deliveryStatus = md.deliveryStatus;
090            this.delivererSystemId = md.delivererSystemId;
091            this.message = md.message;
092            this.lockVerNbr = md.lockVerNbr;
093        }
094    
095        /**
096         * Gets the id attribute. 
097         * @return Returns the id.
098         */
099        public Long getId() {
100            return id;
101        }
102    
103        /**
104         * Sets the id attribute value.
105         * @param id The id to set.
106         */
107        public void setId(Long id) {
108            this.id = id;
109        }
110    
111    
112        /**
113         * Return value of lock column for OJB optimistic locking
114         * @return value of lock column for OJB optimistic locking
115         */
116        public Integer getLockVerNbr() {
117            return lockVerNbr;
118        }
119    
120        /**
121         * Set value of lock column for OJB optimistic locking
122         * @param lockVerNbr value of lock column for OJB optimistic locking
123         */
124        public void setLockVerNbr(Integer lockVerNbr) {
125            this.lockVerNbr = lockVerNbr;
126        }
127    
128        /**
129         * Gets the deliveryStatus attribute. 
130         * @return Returns the deliveryStatus.
131         */
132        public String getDeliveryStatus() {
133            return deliveryStatus;
134        }
135    
136        /**
137         * Convenience method that sets the delivery status in a typesafe manner.
138         * This method is preferred to {@link #setDeliveryStatus(String)}
139         * @param deliveryStatus the MessageDeliveryStatus enum constant
140         */
141        public void setDeliveryStatus(MessageDeliveryStatus deliveryStatus) {
142            this.deliveryStatus = deliveryStatus.name();
143        }
144    
145        /**
146         * Sets the deliveryStatus attribute value.
147         * @param deliveryStatus The deliveryStatus to set.
148         */
149        public void setDeliveryStatus(String deliveryStatus) {
150            // Enums will throw an IllegalArgumentException from valueOf if there
151            // is no matching enum
152            MessageDeliveryStatus.valueOf(deliveryStatus);
153            this.deliveryStatus = deliveryStatus;
154        }
155    
156        /**
157         * @return the number of times processing has been attempted for this message
158         */
159        public Integer getProcessCount() {
160            return this.processCount;
161        }
162    
163        /**
164         * Sets the number of times processing has been attempted for this message
165         * @param processCount the number of times processing has been attempted for this message
166         */
167        public void setProcessCount(Integer processCount) {
168            this.processCount = processCount;
169        }
170    
171        /**
172         * Gets the delivererTypeName attribute. 
173         * @return Returns the delivererTypeName.
174         */
175        public String getDelivererTypeName() {
176            return delivererTypeName;
177        }
178    
179        /**
180         * Sets the delivererTypeName attribute value.
181         * @param delivererTypeName The delivererTypeName to set.
182         */
183        public void setDelivererTypeName(String delivererTypeName) {
184            this.delivererTypeName = delivererTypeName;
185        }
186    
187        /**
188         * Gets the delivererSystemId attribute. 
189         * @return Returns the delivererSystemId.
190         */
191        public String getDelivererSystemId() {
192            return delivererSystemId;
193        }
194    
195        /**
196         * Sets the delivererSystemId attribute value.
197         * @param delivererSystemId The delivererSystemId to set.
198         */
199        public void setDelivererSystemId(String delivererSystemId) {
200            this.delivererSystemId = delivererSystemId;
201        }
202    
203        /**
204         * @return this delivery's message
205         */
206        public Message getMessage() {
207            return this.message;
208        }
209    
210        /**
211         * Sets this delivery's message
212         * @param message the message to set
213         */
214        public void setMessage(Message message) {
215            this.message = message;
216        }
217    
218        /**
219         * @see java.lang.Object#toString()
220         */
221        @Override
222        public String toString() {
223            return new ToStringBuilder(this)
224                           .append("id", id)
225                           .append("deliveryStatus", deliveryStatus)
226                           .append("processCount", processCount)
227                           .append("delivererTypename", delivererTypeName)
228                           .append("delivererSystemId", delivererSystemId)
229                           .append("message", message == null ? null : message.getId())
230                           .toString();
231        }
232    }