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.krad.bo; 017 018 import org.hibernate.annotations.GenericGenerator; 019 import org.hibernate.annotations.Parameter; 020 import org.kuali.rice.core.api.CoreApiServiceLocator; 021 import org.kuali.rice.kim.api.identity.Person; 022 import org.kuali.rice.kim.api.services.KimApiServiceLocator; 023 import org.kuali.rice.krad.service.KRADServiceLocator; 024 import org.kuali.rice.krad.util.KRADConstants; 025 import org.kuali.rice.krad.util.UrlFactory; 026 027 import javax.persistence.CascadeType; 028 import javax.persistence.Column; 029 import javax.persistence.Entity; 030 import javax.persistence.FetchType; 031 import javax.persistence.GeneratedValue; 032 import javax.persistence.Id; 033 import javax.persistence.JoinColumn; 034 import javax.persistence.OneToOne; 035 import javax.persistence.Table; 036 import javax.persistence.Transient; 037 import java.sql.Timestamp; 038 import java.util.Properties; 039 040 /** 041 * Represents a user note in the system. 042 */ 043 @Entity 044 @Table(name="KRNS_NTE_T") 045 public class Note extends PersistableBusinessObjectBase { 046 private static final long serialVersionUID = -7647166354016356770L; 047 048 @Id 049 @GeneratedValue(generator="KRNS_NTE_S") 050 @GenericGenerator(name="KRNS_NTE_S",strategy="org.hibernate.id.enhanced.SequenceStyleGenerator",parameters={ 051 @Parameter(name="sequence_name",value="KRNS_NTE_S"), 052 @Parameter(name="value_column",value="id") 053 }) 054 @Column(name="NTE_ID") 055 private Long noteIdentifier; 056 @Column(name="RMT_OBJ_ID") 057 private String remoteObjectIdentifier; 058 @Column(name="AUTH_PRNCPL_ID") 059 private String authorUniversalIdentifier; 060 @Column(name="POST_TS") 061 private Timestamp notePostedTimestamp; 062 @Column(name="NTE_TYP_CD") 063 private String noteTypeCode; 064 @Column(name="TXT") 065 private String noteText; 066 @Column(name="TPC_TXT") 067 private String noteTopicText; 068 @Column(name="PRG_CD") 069 private String notePurgeCode; 070 @Transient 071 private String attachmentIdentifier; 072 073 @OneToOne(fetch=FetchType.EAGER) 074 @JoinColumn(name="NTE_TYP_CD", insertable=false, updatable=false) 075 private NoteType noteType; 076 @Transient 077 private transient Person authorUniversal; 078 @OneToOne(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }) 079 @JoinColumn(name = "NTE_ID", insertable = false, updatable = false) 080 private Attachment attachment; 081 @Transient 082 private AdHocRouteRecipient adHocRouteRecipient; 083 084 /** 085 * Default constructor. 086 */ 087 public Note() { 088 super(); 089 090 //this.setNotePostedTimestampToCurrent(); 091 this.setNoteText(KRADConstants.EMPTY_STRING); 092 // for now just do this 093 this.setNoteTypeCode("DH"); 094 095 this.setAdHocRouteRecipient(new AdHocRoutePerson()); 096 } 097 098 /** 099 * Sets the {@link #setNotePostedTimestamp(Timestamp)} to the current time. 100 */ 101 public void setNotePostedTimestampToCurrent() { 102 final Timestamp now = CoreApiServiceLocator.getDateTimeService().getCurrentTimestamp(); 103 this.setNotePostedTimestamp(now); 104 } 105 106 /** 107 * Gets the noteIdentifier attribute. 108 * 109 * @return Returns the noteIdentifier. 110 */ 111 public Long getNoteIdentifier() { 112 return noteIdentifier; 113 } 114 115 /** 116 * Sets the noteIdentifier attribute value. 117 * 118 * @param noteIdentifier The noteIdentifier to set. 119 */ 120 public void setNoteIdentifier(Long noteIdentifier) { 121 this.noteIdentifier = noteIdentifier; 122 } 123 124 /** 125 * Gets the remoteObjectIdentifier attribute. 126 * 127 * @return Returns the remoteObjectIdentifier 128 */ 129 public String getRemoteObjectIdentifier() { 130 return remoteObjectIdentifier; 131 } 132 133 /** 134 * Sets the remoteObjectIdentifier attribute. 135 * 136 * @param remoteObjectIdentifier The remoteObjectIdentifier to set. 137 */ 138 public void setRemoteObjectIdentifier(String remoteObjectIdentifier) { 139 this.remoteObjectIdentifier = remoteObjectIdentifier; 140 } 141 142 143 /** 144 * Gets the authorUniversalIdentifier attribute. 145 * 146 * @return Returns the authorUniversalIdentifier 147 */ 148 public String getAuthorUniversalIdentifier() { 149 return authorUniversalIdentifier; 150 } 151 152 /** 153 * Sets the authorUniversalIdentifier attribute. 154 * 155 * @param noteAuthorIdentifier The author ID to be set as the AuthorUniversalIdentifier 156 */ 157 public void setAuthorUniversalIdentifier(String noteAuthorIdentifier) { 158 this.authorUniversalIdentifier = noteAuthorIdentifier; 159 } 160 161 162 /** 163 * Gets the notePostedTimestamp attribute. 164 * 165 * @return Returns the notePostedTimestamp 166 */ 167 public Timestamp getNotePostedTimestamp() { 168 return notePostedTimestamp; 169 } 170 171 /** 172 * Sets the notePostedTimestamp attribute. 173 * 174 * @param notePostedTimestamp The notePostedTimestamp to set. 175 */ 176 public void setNotePostedTimestamp(Timestamp notePostedTimestamp) { 177 this.notePostedTimestamp = notePostedTimestamp; 178 } 179 180 181 /** 182 * Gets the noteTypeCode attribute. 183 * 184 * @return Returns the noteTypeCode 185 */ 186 public String getNoteTypeCode() { 187 return noteTypeCode; 188 } 189 190 /** 191 * Sets the noteTypeCode attribute. 192 * 193 * @param noteTypeCode The noteTypeCode to set. 194 */ 195 public void setNoteTypeCode(String noteTypeCode) { 196 this.noteTypeCode = noteTypeCode; 197 } 198 199 200 /** 201 * Gets the noteText attribute. 202 * 203 * @return Returns the noteText 204 */ 205 public String getNoteText() { 206 return noteText; 207 } 208 209 /** 210 * Sets the noteText attribute. 211 * 212 * @param noteText The noteText to set. 213 */ 214 public void setNoteText(String noteText) { 215 this.noteText = noteText; 216 } 217 218 219 /** 220 * Gets the noteTopicText attribute. 221 * 222 * @return Returns the noteTopicText. 223 */ 224 public String getNoteTopicText() { 225 return noteTopicText; 226 } 227 228 /** 229 * Sets the noteTopicText attribute value. 230 * 231 * @param noteTopicText The noteTopicText to set. 232 */ 233 public void setNoteTopicText(String noteTopicText) { 234 this.noteTopicText = noteTopicText; 235 } 236 237 /** 238 * Gets the notePurgeCode attribute. 239 * 240 * @return Returns the notePurgeCode 241 */ 242 public String getNotePurgeCode() { 243 return notePurgeCode; 244 } 245 246 /** 247 * Sets the notePurgeCode attribute. 248 * 249 * @param notePurgeCode The notePurgeCode to set. 250 */ 251 public void setNotePurgeCode(String notePurgeCode) { 252 this.notePurgeCode = notePurgeCode; 253 } 254 255 /** 256 * Gets the noteType attribute. 257 * 258 * @return Returns the noteType. 259 */ 260 public NoteType getNoteType() { 261 return noteType; 262 } 263 264 /** 265 * Sets the noteType attribute value. 266 * 267 * @param noteType The noteType to set. 268 * @deprecated 269 */ 270 public void setNoteType(NoteType noteType) { 271 this.noteType = noteType; 272 } 273 274 /** 275 * Gets the authorUniversal attribute. 276 * 277 * @return Returns the authorUniversal. 278 */ 279 public Person getAuthorUniversal() { 280 authorUniversal = KimApiServiceLocator.getPersonService().updatePersonIfNecessary(authorUniversalIdentifier, authorUniversal); 281 return authorUniversal; 282 } 283 284 /** 285 * Sets the authorUniversal attribute value. 286 * 287 * @param authorUniversal The authorUniversal to set. 288 * @deprecated 289 */ 290 public void setAuthorUniversal(Person authorUniversal) { 291 this.authorUniversal = authorUniversal; 292 } 293 294 /** 295 * Gets the attachment attribute. 296 * 297 * @return Returns the attachment. 298 */ 299 public Attachment getAttachment() { 300 return attachment; 301 } 302 303 /** 304 * Sets the attachment attribute value. 305 * 306 * @param attachment The attachment to set. 307 */ 308 public void setAttachment(Attachment attachment) { 309 this.attachment = attachment; 310 } 311 312 /** 313 * Gets the attachmentIdentifier attribute. 314 * 315 * @return Returns the attachmentIdentifier. 316 */ 317 public String getAttachmentIdentifier() { 318 return attachmentIdentifier; 319 } 320 321 /** 322 * Sets the attachmentIdentifier attribute value. 323 * 324 * @param attachmentIdentifier The attachmentIdentifier to set. 325 */ 326 public void setAttachmentIdentifier(String attachmentIdentifier) { 327 this.attachmentIdentifier = attachmentIdentifier; 328 } 329 330 /** 331 * Adds the given attachment to this note. More specifically, sets both the attachmentIdentifier and the attachment reference, 332 * since they both need to be done separately now that we aren't using anonymous keys. 333 * 334 * @param attachment 335 */ 336 public void addAttachment(Attachment attachment) { 337 setAttachmentIdentifier(attachment.getAttachmentIdentifier()); 338 setAttachment(attachment); 339 340 // copy foreign key and redundant values into attachment 341 attachment.setNoteIdentifier(noteIdentifier); 342 // we'll need this note reference if the attachment is deleted 343 // before the note is saved 344 attachment.setNote(this); 345 } 346 347 /** 348 * Removes the current attachment, if any. More specifically, clears both the attachmentIdentifier and the attachment reference, 349 * since they both need to be done separately now that we aren't using anonymous keys. 350 */ 351 public void removeAttachment() { 352 setAttachment(null); 353 setAttachmentIdentifier(null); 354 } 355 356 /** 357 * @return the adHocRouteRecipient 358 */ 359 public AdHocRouteRecipient getAdHocRouteRecipient() { 360 return adHocRouteRecipient; 361 } 362 363 /** 364 * @param adHocRouteRecipient the adHocRouteRecipient to set 365 */ 366 public void setAdHocRouteRecipient(AdHocRouteRecipient adHocRouteRecipient) { 367 this.adHocRouteRecipient = adHocRouteRecipient; 368 } 369 /** 370 * @return the attachmentLink 371 */ 372 public String getAttachmentLink() { 373 //getAttachment() is always return null. 374 if(KRADServiceLocator.getAttachmentService().getAttachmentByNoteId(this.getNoteIdentifier()) == null){ 375 return ""; 376 }else{ 377 Properties params = new Properties(); 378 params.put(KRADConstants.DISPATCH_REQUEST_PARAMETER, KRADConstants.DOWNLOAD_BO_ATTACHMENT_METHOD); 379 params.put(KRADConstants.DOC_FORM_KEY, "88888888"); 380 params.put(KRADConstants.NOTE_IDENTIFIER, this.getNoteIdentifier().toString()); 381 return UrlFactory.parameterizeUrl(KRADConstants.INQUIRY_ACTION, params); 382 } 383 } 384 } 385 386