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