1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.kuali.rice.kew.notes.web;
18
19 import org.apache.commons.lang.StringUtils;
20 import org.apache.struts.action.ActionForm;
21 import org.apache.struts.action.ActionForward;
22 import org.apache.struts.action.ActionMapping;
23 import org.apache.struts.action.ActionMessages;
24 import org.apache.struts.upload.FormFile;
25 import org.kuali.rice.core.util.RiceConstants;
26 import org.kuali.rice.kew.notes.Attachment;
27 import org.kuali.rice.kew.notes.CustomNoteAttribute;
28 import org.kuali.rice.kew.notes.Note;
29 import org.kuali.rice.kew.notes.service.NoteService;
30 import org.kuali.rice.kew.routeheader.DocumentRouteHeaderValue;
31 import org.kuali.rice.kew.routeheader.service.RouteHeaderService;
32 import org.kuali.rice.kew.service.KEWServiceLocator;
33 import org.kuali.rice.kew.util.KEWConstants;
34 import org.kuali.rice.kew.util.Utilities;
35 import org.kuali.rice.kew.web.KewKualiAction;
36 import org.kuali.rice.kew.web.session.UserSession;
37 import org.kuali.rice.kim.bo.Person;
38 import org.kuali.rice.kim.service.KIMServiceLocator;
39 import org.kuali.rice.kns.util.KNSConstants;
40
41 import javax.servlet.http.HttpServletRequest;
42 import javax.servlet.http.HttpServletResponse;
43 import java.sql.Timestamp;
44 import java.text.DateFormat;
45 import java.util.*;
46
47
48
49
50
51
52
53
54
55 public class NoteAction extends KewKualiAction {
56
57 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(NoteAction.class);
58
59 @Override
60 public ActionForward execute(ActionMapping mapping, ActionForm form,
61 HttpServletRequest request, HttpServletResponse response)
62 throws Exception {
63 initForm(request, form);
64 return super.execute(mapping, form, request, response);
65 }
66
67
68
69
70
71
72 @Override
73 public ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
74 NoteForm noteForm = (NoteForm) form;
75 if(StringUtils.isBlank(noteForm.getShowEdit())) {
76 noteForm.setShowEdit("no");
77 }
78 return super.start(mapping, noteForm, request, response);
79 }
80
81
82 public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
83 NoteForm noteForm = (NoteForm) form;
84 noteForm.setShowEdit("no");
85 noteForm.setNoteIdNumber(null);
86 retrieveNoteList(request, noteForm);
87 noteForm.setShowAdd(Boolean.TRUE);
88 return start(mapping, form, request, response);
89 }
90
91 public ActionForward deleteAttachment(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
92 NoteForm noteForm = (NoteForm) form;
93 NoteService noteService = KEWServiceLocator.getNoteService();
94 Note note = noteService.getNoteByNoteId(noteForm.getNote().getNoteId());
95 noteService.deleteAttachment((Attachment)note.getAttachments().remove(0));
96 noteForm.setDocId(note.getRouteHeaderId());
97 noteForm.setNoteIdNumber(note.getNoteId());
98 edit(mapping, form, request, response);
99 return start(mapping, form, request, response);
100
101 }
102
103 public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
104 NoteForm noteForm = (NoteForm) form;
105 if ("yes".equalsIgnoreCase(noteForm.getShowEdit())) {
106 noteForm.setNoteIdNumber(noteForm.getNote().getNoteId());
107 } else {
108 noteForm.setShowEdit("yes");
109 Note noteToEdit = getNoteService().getNoteByNoteId(noteForm.getNoteIdNumber());
110 noteForm.setNote(noteToEdit);
111 noteForm.getNote().setNoteCreateLongDate(new Long(noteForm.getNote().getNoteCreateDate().getTime()));
112 }
113 retrieveNoteList(request, noteForm);
114 return start(mapping, form, request, response);
115 }
116
117
118
119
120
121
122
123 public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
124 NoteForm noteForm = (NoteForm) form;
125 Note noteToSave = null;
126 if (noteForm.getShowEdit().equals("yes")) {
127 noteToSave = noteForm.getNote();
128 noteToSave.setNoteCreateDate(new Timestamp(noteToSave.getNoteCreateLongDate().longValue()));
129 } else {
130 noteToSave = new Note();
131 noteToSave.setNoteId(null);
132 noteToSave.setRouteHeaderId(noteForm.getDocId());
133 noteToSave.setNoteCreateDate(new Timestamp((new Date()).getTime()));
134 noteToSave.setNoteAuthorWorkflowId(getUserSession(request).getPrincipalId());
135 noteToSave.setNoteText(noteForm.getAddText());
136 }
137 CustomNoteAttribute customNoteAttribute = null;
138 DocumentRouteHeaderValue routeHeader = getRouteHeaderService().getRouteHeader(noteToSave.getRouteHeaderId());
139 boolean canEditNote = false;
140 boolean canAddNotes = false;
141 if (routeHeader != null) {
142 customNoteAttribute = routeHeader.getCustomNoteAttribute();
143 if (customNoteAttribute != null) {
144 customNoteAttribute.setUserSession(getUserSession(request));
145 canAddNotes = customNoteAttribute.isAuthorizedToAddNotes();
146 canEditNote = customNoteAttribute.isAuthorizedToEditNote(noteToSave);
147 }
148 }
149
150 if ((noteForm.getShowEdit().equals("yes") && canEditNote) ||
151 (!noteForm.getShowEdit().equals("yes") && canAddNotes)) {
152 FormFile uploadedFile = (FormFile)noteForm.getFile();
153 if (uploadedFile != null && StringUtils.isNotBlank(uploadedFile.getFileName())) {
154 Attachment attachment = new Attachment();
155 attachment.setAttachedObject(uploadedFile.getInputStream());
156 attachment.setFileName(uploadedFile.getFileName());
157 attachment.setMimeType(uploadedFile.getContentType());
158 attachment.setNote(noteToSave);
159 noteToSave.getAttachments().add(attachment);
160 }
161 getNoteService().saveNote(noteToSave);
162 }
163 if (noteForm.getShowEdit().equals("yes")) {
164 noteForm.setNote(new Note());
165 } else {
166 noteForm.setAddText(null);
167 }
168 noteForm.setShowEdit("no");
169 noteForm.setNoteIdNumber(null);
170 retrieveNoteList(request, noteForm);
171 return start(mapping, form, request, response);
172 }
173
174 public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
175 NoteForm noteForm = (NoteForm) form;
176 Note existingNote = getNoteService().getNoteByNoteId(noteForm.getNoteIdNumber());
177 getNoteService().deleteNote(existingNote);
178 noteForm.setShowEdit("no");
179 noteForm.setNoteIdNumber(null);
180 retrieveNoteList(request, noteForm);
181 return start(mapping, form, request, response);
182 }
183
184 public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
185 NoteForm noteForm = (NoteForm) form;
186 noteForm.setShowEdit("no");
187 noteForm.setNote(new Note());
188 noteForm.setNoteIdNumber(null);
189 retrieveNoteList(request, noteForm);
190 return start(mapping, form, request, response);
191 }
192
193 public ActionForward sort(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
194 return start(mapping, form, request, response);
195 }
196
197
198
199 public ActionMessages initForm(HttpServletRequest request, ActionForm form) throws Exception {
200 NoteForm noteForm = (NoteForm) form;
201 noteForm.setCurrentUserName(getUserSession(request).getPerson().getName());
202 noteForm.setCurrentDate(getCurrentDate());
203 if (! "workflowReport".equalsIgnoreCase(noteForm.getMethodToCall()) && ! "add".equalsIgnoreCase(noteForm.getMethodToCall()) && ! "cancel".equalsIgnoreCase(noteForm.getMethodToCall()) && ! "edit".equalsIgnoreCase(noteForm.getMethodToCall()) && ! "delete".equalsIgnoreCase(noteForm.getMethodToCall()) && ! "save".equalsIgnoreCase(noteForm.getMethodToCall())) {
204 retrieveNoteList(request, noteForm);
205 }
206 boolean showAttachments = Utilities.getKNSParameterBooleanValue(KEWConstants.KEW_NAMESPACE, KNSConstants.DetailTypes.ALL_DETAIL_TYPE, KEWConstants.SHOW_ATTACHMENTS_IND);
207 noteForm.setShowAttachments(new Boolean(showAttachments));
208 return null;
209 }
210
211 private void retrieveNoteList(HttpServletRequest request, NoteForm noteForm) throws Exception {
212 if (noteForm.getDocId() != null) {
213
214
215 CustomNoteAttribute customNoteAttribute = null;
216 DocumentRouteHeaderValue routeHeader = getRouteHeaderService().getRouteHeader(noteForm.getDocId());
217
218 List allNotes = routeHeader.getNotes();
219 boolean canAddNotes = false;
220 if (routeHeader != null) {
221 customNoteAttribute = routeHeader.getCustomNoteAttribute();
222 if (customNoteAttribute != null) {
223 customNoteAttribute.setUserSession(getUserSession(request));
224 canAddNotes = customNoteAttribute.isAuthorizedToAddNotes();
225 }
226 }
227 Iterator notesIter = allNotes.iterator();
228 while (notesIter.hasNext()) {
229 Note singleNote = (Note) notesIter.next();
230 singleNote.setNoteCreateLongDate(new Long(singleNote.getNoteCreateDate().getTime()));
231 getAuthorData(singleNote);
232 boolean canEditNote = false;
233 if (customNoteAttribute != null) {
234 canEditNote = customNoteAttribute.isAuthorizedToEditNote(singleNote);
235 }
236 singleNote.setAuthorizedToEdit(new Boolean(canEditNote));
237 if (noteForm.getNoteIdNumber() != null && (noteForm.getNoteIdNumber().intValue() == singleNote.getNoteId().intValue())) {
238 singleNote.setEditingNote(Boolean.TRUE);
239 }
240 }
241 if (noteForm.getSortNotes() != null && noteForm.getSortNotes().booleanValue()) {
242 if (KEWConstants.Sorting.SORT_SEQUENCE_DSC.equalsIgnoreCase(noteForm.getSortOrder())) {
243 noteForm.setSortOrder(KEWConstants.Sorting.SORT_SEQUENCE_ASC);
244 noteForm.setSortNotes(Boolean.FALSE);
245 } else {
246 noteForm.setSortOrder(KEWConstants.Sorting.SORT_SEQUENCE_DSC);
247 noteForm.setSortNotes(Boolean.FALSE);
248 }
249 } else {
250 noteForm.setSortOrder(noteForm.getSortOrder());
251 }
252 noteForm.setNoteList(sortNotes(allNotes, noteForm.getSortOrder()));
253 noteForm.setNumberOfNotes(new Integer(allNotes.size()));
254 noteForm.setAuthorizedToAdd(new Boolean(canAddNotes));
255 noteForm.setShowAdd(Boolean.TRUE);
256 if (! canAddNotes) {
257 noteForm.setShowAdd(Boolean.FALSE);
258 } else if (noteForm.getNoteList().size() == 0) {
259 noteForm.setShowAdd(Boolean.FALSE);
260 }
261 }
262 }
263
264 private void getAuthorData(Note note) throws Exception {
265 Person user = null;
266 String id = "";
267 if (note != null && note.getNoteAuthorWorkflowId() != null && ! "".equalsIgnoreCase(note.getNoteAuthorWorkflowId())) {
268 user = KIMServiceLocator.getPersonService().getPerson(note.getNoteAuthorWorkflowId());
269 id = note.getNoteAuthorWorkflowId();
270 }
271 if (user != null) {
272 note.setNoteAuthorFullName(user.getName());
273 note.setNoteAuthorEmailAddress(user.getEmailAddressUnmasked());
274 note.setNoteAuthorNetworkId(user.getPrincipalId());
275 } else {
276 note.setNoteAuthorFullName(id + " (Name not Available)");
277 note.setNoteAuthorEmailAddress("Not Available");
278 note.setNoteAuthorNetworkId("Not Available");
279 }
280 }
281
282 public String getCurrentDate() {
283 Date currentDate = new Date();
284 DateFormat dateFormat = RiceConstants.getDefaultDateFormat();
285 return dateFormat.format(currentDate);
286 }
287
288 private List sortNotes(List allNotes, String sortOrder) {
289 final int returnCode = KEWConstants.Sorting.SORT_SEQUENCE_DSC.equalsIgnoreCase(sortOrder) ? -1 : 1;
290
291 try {
292 Collections.sort(allNotes,
293 new Comparator() {
294 public int compare(Object o1, Object o2) {
295 Timestamp date1 = ((Note) o1).getNoteCreateDate();
296 Timestamp date2 = ((Note) o2).getNoteCreateDate();
297
298 if (date1.before(date2)) {
299 return returnCode * -1;
300 } else if (date1.after(date2)) {
301 return returnCode;
302 } else {
303 return 0;
304 }
305 }
306 });
307 } catch (Throwable e) {
308 LOG.error(e.getMessage(), e);
309 }
310 return allNotes;
311 }
312
313 private NoteService getNoteService() {
314 return (NoteService) KEWServiceLocator.getService(KEWServiceLocator.NOTE_SERVICE);
315 }
316
317 private RouteHeaderService getRouteHeaderService() {
318 return (RouteHeaderService) KEWServiceLocator.getService(KEWServiceLocator.DOC_ROUTE_HEADER_SRV);
319 }
320 private static UserSession getUserSession(HttpServletRequest request) {
321 return UserSession.getAuthenticatedUser();
322 }
323 }