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