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 }