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.kew.notes;
017    
018    import org.hibernate.annotations.Fetch;
019    import org.hibernate.annotations.FetchMode;
020    import org.hibernate.annotations.GenericGenerator;
021    import org.hibernate.annotations.Parameter;
022    import org.joda.time.DateTime;
023    import org.kuali.rice.core.api.util.RiceConstants;
024    import org.kuali.rice.core.framework.persistence.jpa.OrmUtils;
025    import org.kuali.rice.kew.api.note.NoteContract;
026    import org.kuali.rice.kew.service.KEWServiceLocator;
027    import org.kuali.rice.kew.api.KewApiConstants;
028    
029    import javax.persistence.CascadeType;
030    import javax.persistence.Column;
031    import javax.persistence.Entity;
032    import javax.persistence.FetchType;
033    import javax.persistence.GeneratedValue;
034    import javax.persistence.Id;
035    import javax.persistence.NamedQueries;
036    import javax.persistence.NamedQuery;
037    import javax.persistence.OneToMany;
038    import javax.persistence.Table;
039    import javax.persistence.Transient;
040    import javax.persistence.Version;
041    import java.io.Serializable;
042    import java.sql.Timestamp;
043    import java.text.DateFormat;
044    import java.text.SimpleDateFormat;
045    import java.util.ArrayList;
046    import java.util.Calendar;
047    import java.util.Date;
048    import java.util.List;
049    
050    
051    /**
052     * A note attached to a document.  May also contain a List of attachments.
053     * 
054     * @see Attachment
055     *
056     * @author Kuali Rice Team (rice.collab@kuali.org)
057     */
058    @Entity(name="org.kuali.rice.kew.notes.Note")
059    @Table(name="KREW_DOC_NTE_T")
060    //@Sequence(name="KREW_DOC_NTE_S",property="noteId")
061    @NamedQueries({
062            @NamedQuery(name="KewNote.FindNoteByNoteId",query="select n from org.kuali.rice.kew.notes.Note as n where n.noteId = :noteId"),
063            @NamedQuery(name="KewNote.FindNoteByDocumentId", query="select n from org.kuali.rice.kew.notes.Note as n where n.documentId = :documentId order by n.noteId")
064    })
065    public class Note implements Serializable, NoteContract {
066    
067            private static final long serialVersionUID = -6136544551121011531L;
068            @Id
069            @GeneratedValue(generator="KREW_DOC_NTE_S")
070            @GenericGenerator(name="KREW_DOC_NTE_S",strategy="org.hibernate.id.enhanced.SequenceStyleGenerator",parameters={
071                            @Parameter(name="sequence_name",value="KREW_DOC_NTE_S"),
072                            @Parameter(name="value_column",value="id")
073            })
074            @Column(name="DOC_NTE_ID")
075            private String noteId;
076        @Column(name="DOC_HDR_ID")
077            private String documentId;
078        @Column(name="AUTH_PRNCPL_ID")
079            private String noteAuthorWorkflowId;
080            @Column(name="CRT_DT")
081            private Timestamp noteCreateDate;
082        @Column(name="TXT")
083            private String noteText;
084        @Version
085            @Column(name="VER_NBR")
086            private Integer lockVerNbr;
087        
088        @OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST},
089            targetEntity=org.kuali.rice.kew.notes.Attachment.class, mappedBy="note")
090        @Fetch(value = FetchMode.SELECT)
091        private List<Attachment> attachments = new ArrayList<Attachment>();
092    
093        //additional data not in database
094        @Transient
095        private String noteAuthorEmailAddress;
096        @Transient
097        private String noteAuthorNetworkId;
098        @Transient
099        private String noteAuthorFullName;
100        @Transient
101        private Long noteCreateLongDate;
102        @Transient
103        private Boolean authorizedToEdit; 
104        @Transient
105        private Boolean editingNote;
106        
107        public Integer getLockVerNbr() {
108            return lockVerNbr;
109        }
110    
111        public void setLockVerNbr(Integer lockVerNbr) {
112            this.lockVerNbr = lockVerNbr;
113        }
114    
115        public String getNoteAuthorWorkflowId() {
116            return noteAuthorWorkflowId;
117        }
118    
119        public void setNoteAuthorWorkflowId(String noteAuthorWorkflowId) {
120            this.noteAuthorWorkflowId = noteAuthorWorkflowId;
121        }
122    
123        public Timestamp getNoteCreateDate() {
124            return noteCreateDate;
125        }
126    
127        public void setNoteCreateDate(Timestamp noteCreateDate) {
128            this.noteCreateDate = noteCreateDate;
129        }
130    
131        public String getNoteId() {
132            return noteId;
133        }
134     
135        public void setNoteId(String noteId) {
136            this.noteId = noteId;
137        }
138     
139        public String getNoteText() {
140            return noteText;
141        }
142    
143        public void setNoteText(String noteText) {
144            this.noteText = noteText;
145        }
146    
147        public String getDocumentId() {
148            return documentId;
149        }
150    
151        public void setDocumentId(String documentId) {
152            this.documentId = documentId;
153        }
154    
155        public String getNoteAuthorEmailAddress() {
156            return noteAuthorEmailAddress;
157        }
158     
159        public void setNoteAuthorEmailAddress(String noteAuthorEmailAddress) {
160            this.noteAuthorEmailAddress = noteAuthorEmailAddress;
161        }
162    
163        public String getNoteAuthorFullName() {
164            return noteAuthorFullName;
165        }
166    
167        public void setNoteAuthorFullName(String noteAuthorFullName) {
168            this.noteAuthorFullName = noteAuthorFullName;
169        }
170    
171        public String getNoteAuthorNetworkId() {
172            return noteAuthorNetworkId;
173        }
174    
175        public void setNoteAuthorNetworkId(String noteAuthorNetworkId) {
176            this.noteAuthorNetworkId = noteAuthorNetworkId;
177        }
178    
179        public Long getNoteCreateLongDate() {
180            return noteCreateLongDate;
181        }
182    
183        public void setNoteCreateLongDate(Long noteCreateLongDate) {
184            this.noteCreateLongDate = noteCreateLongDate;
185        }
186    
187        public Boolean getAuthorizedToEdit() {
188            return authorizedToEdit;
189        }
190    
191        public void setAuthorizedToEdit(Boolean authorizedToEdit) {
192            this.authorizedToEdit = authorizedToEdit;
193        }
194    
195        public Boolean getEditingNote() {
196            return editingNote;
197        }
198    
199        public void setEditingNote(Boolean editingNote) {
200            this.editingNote = editingNote;
201        }
202    
203        public String getFormattedCreateDateTime() {
204            long time = getNoteCreateDate().getTime();
205            Calendar calendar = Calendar.getInstance();
206            calendar.setTimeInMillis(time);
207            Date date = calendar.getTime();
208            DateFormat dateFormat = new SimpleDateFormat(KewApiConstants.TIMESTAMP_DATE_FORMAT_PATTERN2);
209            return dateFormat.format(date);
210        }
211    
212        public String getFormattedCreateDate() {
213            long time = getNoteCreateDate().getTime();
214            Calendar calendar = Calendar.getInstance();
215            calendar.setTimeInMillis(time);
216            Date date = calendar.getTime();
217            DateFormat dateFormat = RiceConstants.getDefaultDateFormat();
218            return dateFormat.format(date);
219        }
220        
221        public String getFormattedCreateTime() {
222            long time = getNoteCreateDate().getTime();
223            Calendar calendar = Calendar.getInstance();
224            calendar.setTimeInMillis(time);
225            Date date = calendar.getTime();
226            DateFormat dateFormat = RiceConstants.getDefaultTimeFormat();
227            return dateFormat.format(date);
228        }
229    
230            public List<Attachment> getAttachments() {
231                    return attachments;
232            }
233    
234            public void setAttachments(List<Attachment> attachments) {
235                    this.attachments = attachments;
236            }
237            
238            //@PrePersist
239            public void beforeInsert(){
240                    OrmUtils.populateAutoIncValue(this, KEWServiceLocator.getEntityManagerFactory().createEntityManager());
241            }
242            
243            // new methods from NoteContract in 2.0
244    
245            @Override
246            public String getId() {
247                    if (getNoteId() == null) {
248                            return null;
249                    }
250                    return getNoteId().toString();
251            }
252    
253            @Override
254            public Long getVersionNumber() {
255                    if (getLockVerNbr() == null) {
256                            return null;
257                    }
258                    return new Long(getLockVerNbr().longValue());
259            }
260    
261            @Override
262            public String getAuthorPrincipalId() {
263                    return getNoteAuthorWorkflowId();
264            }
265    
266            @Override
267            public DateTime getCreateDate() {
268                    if (getNoteCreateDate() == null) {
269                            return null;
270                    }
271                    return new DateTime(getNoteCreateDate().getTime());
272            }
273    
274            @Override
275            public String getText() {
276                    return getNoteText();
277            }
278            
279            public static org.kuali.rice.kew.api.note.Note to(Note note) {
280                    if (note == null) {
281                            return null;
282                    }
283                    return org.kuali.rice.kew.api.note.Note.Builder.create(note).build();
284            }
285            
286            public static Note from(org.kuali.rice.kew.api.note.Note note) {
287                    if (note == null) {
288                            return null;
289                    }
290                    Note noteBo = new Note();
291                    if (note.getId() != null) {
292                            noteBo.setNoteId(note.getId());
293                    }
294                    noteBo.setDocumentId(note.getDocumentId());
295                    noteBo.setNoteAuthorWorkflowId(note.getAuthorPrincipalId());
296                    if (note.getCreateDate() != null) {
297                            noteBo.setNoteCreateDate(new Timestamp(note.getCreateDate().getMillis()));
298                    }
299                    noteBo.setNoteText(note.getText());
300                    if (note.getVersionNumber() != null) {
301                            noteBo.setLockVerNbr(Integer.valueOf(note.getVersionNumber().intValue()));
302                    }
303                    return noteBo;
304            }
305            
306    }
307