1 package org.kuali.ole.describe.controller;
2
3 import org.apache.log4j.Logger;
4 import org.kuali.ole.OLEConstants;
5 import org.kuali.ole.QualifiedDublinRecordHandler;
6 import org.kuali.ole.UnQualifiedDublinRecordHandler;
7 import org.kuali.ole.describe.bo.*;
8 import org.kuali.ole.describe.form.EditorForm;
9 import org.kuali.ole.describe.form.WorkBibDublinForm;
10 import org.kuali.ole.docstore.common.document.*;
11 import org.kuali.ole.docstore.common.document.content.enums.DocCategory;
12 import org.kuali.ole.docstore.model.enums.DocFormat;
13 import org.kuali.ole.docstore.model.enums.DocType;
14 import org.kuali.ole.docstore.model.xmlpojo.ingest.AdditionalAttributes;
15 import org.kuali.ole.docstore.model.xmlpojo.ingest.ResponseDocument;
16 import org.kuali.ole.docstore.model.xmlpojo.work.bib.dublin.WorkBibDublinRecord;
17 import org.kuali.ole.describe.service.DocstoreHelperService;
18 import org.kuali.ole.pojo.dublin.unqualified.UnQualifiedDublinRecord;
19 import org.kuali.rice.krad.service.BusinessObjectService;
20 import org.kuali.rice.krad.service.KRADServiceLocator;
21 import org.kuali.rice.krad.uif.UifParameters;
22 import org.kuali.rice.krad.util.GlobalVariables;
23 import org.kuali.rice.krad.util.KRADConstants;
24 import org.kuali.rice.krad.web.form.UifFormBase;
25 import org.springframework.validation.BindingResult;
26 import org.springframework.web.bind.annotation.ModelAttribute;
27 import org.springframework.web.bind.annotation.RequestMapping;
28 import org.springframework.web.servlet.ModelAndView;
29
30 import javax.servlet.http.HttpServletRequest;
31 import javax.servlet.http.HttpServletResponse;
32 import java.text.SimpleDateFormat;
33 import java.util.*;
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public class WorkBibDublinEditor
50 extends AbstractEditor
51 implements DocumentEditor {
52
53
54
55
56 private static final Logger LOG = Logger.getLogger(WorkBibDublinEditor.class);
57
58 private WorkDublinEditorFormDataHandler dublinEditorFormDataHandler;
59 private DocstoreHelperService docstoreHelperService;
60
61 private static WorkBibDublinEditor workBibDublinEditor = new WorkBibDublinEditor();
62
63 public static WorkBibDublinEditor getInstance() {
64 return workBibDublinEditor;
65 }
66
67 private WorkBibDublinEditor() {
68 }
69
70
71
72
73
74
75
76 @Override
77 public EditorForm loadDocument(EditorForm editorForm) {
78 WorkBibDublinForm dublinEditorForm = new WorkBibDublinForm();
79 String docId = editorForm.getDocId();
80 String bibId = editorForm.getBibId();
81 String docFormat = editorForm.getDocFormat();
82 editorForm.setFromDublin(true);
83 List<BibTree> bibTreeList = new ArrayList();
84 BibTree bibTree = null;
85 Bib bib = null;
86
87 if (null != docId) {
88 try {
89
90 bibTree = getDocstoreClientLocator().getDocstoreClient().retrieveBibTree(docId);
91 bibTreeList.add(bibTree);
92 bib = bibTree.getBib();
93 dublinEditorForm.setBibTreeList(bibTreeList);
94 if (docFormat.equals(DocFormat.DUBLIN_UNQUALIFIED.getCode())) {
95 UnQualifiedDublinRecord unQualifiedDublinRecord = new UnQualifiedDublinRecordHandler().fromXML(bib.getContent());
96 editorForm.setCreatedBy(bib.getStatus());
97 editorForm.setCreatedDate(bib.getCreatedOn());
98 editorForm.setUpdatedBy(bib.getUpdatedBy());
99 editorForm.setUpdatedDate(bib.getUpdatedOn());
100 editorForm.setStatusUpdatedBy(bib.getStatusUpdatedBy());
101 editorForm.setStatusUpdatedOn(bib.getStatusUpdatedOn());
102 editorForm.setStaffOnlyFlagForBib(bib.isStaffOnly());
103 editorForm.setTitle(getDublinEditorFormDataHandler().buildDublinUnqTitleField(editorForm, unQualifiedDublinRecord));
104 editorForm.setDublinFieldList(getDublinEditorFormDataHandler().buildDublinUnqEditorFields(editorForm, unQualifiedDublinRecord));
105 BusinessObjectService boService = KRADServiceLocator.getBusinessObjectService();
106 Map parentCriteria = new HashMap();
107 String bibStatusName = bib.getStatus();
108 parentCriteria.put("bibliographicRecordStatusName", bibStatusName);
109 OleBibliographicRecordStatus bibliographicRecordStatus = boService
110 .findByPrimaryKey(OleBibliographicRecordStatus.class, parentCriteria);
111 editorForm.setOleBibliographicRecordStatus(bibliographicRecordStatus);
112 } else if (docFormat.equals(DocFormat.DUBLIN_CORE.getCode())) {
113 WorkBibDublinRecord workBibDublinRecord = new QualifiedDublinRecordHandler().fromXML(bib.getContent());
114 dublinEditorForm.setDublinFieldList(getDublinEditorFormDataHandler().buildDublinEditorFields(editorForm, workBibDublinRecord));
115 }
116 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, "record.load.message");
117 } catch (Exception e) {
118 LOG.error("Error: Could not load Bib record for id" + docId + ",Cause:" + e.getMessage(), e);
119 dublinEditorForm.setMessage("Error: Could not load Bib record for id:" + docId);
120 }
121 } else {
122 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, "dublin.editor.new.message");
123 }
124
125 dublinEditorForm.setViewId("WorkBibDublinEditorViewPage");
126
127 editorForm.setHasLink(false);
128 return dublinEditorForm;
129 }
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208 @Override
209 public EditorForm deleteDocument(EditorForm editorForm) {
210 return new WorkBibDublinForm();
211 }
212
213 @Override
214 public EditorForm saveDocument(EditorForm editorForm) {
215 WorkBibDublinForm dublinEditorForm = (WorkBibDublinForm) editorForm.getDocumentForm();
216 String bibliographicRecordStatusCode = editorForm.getOleBibliographicRecordStatus().getBibliographicRecordStatusCode();
217 boolean staffOnlyFlag = editorForm.isStaffOnlyFlagForBib();
218 String uuid = editorForm.getDocId();
219 String bibId = editorForm.getBibId();
220 AdditionalAttributes additionalAttributes = new AdditionalAttributes();
221 ResponseDocument responseDocument = null;
222 Date date = new Date();
223 SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
224 String dateStr = sdf.format(date);
225 String user = GlobalVariables.getUserSession().getLoggedInUserPrincipalName();
226 String content = "";
227 String editorStatusMessage = "";
228 BusinessObjectService boService = KRADServiceLocator.getBusinessObjectService();
229 OleBibliographicRecordStatus bibliographicRecordStatus = null;
230 if (bibliographicRecordStatusCode != null) {
231 content = getDublinEditorFormDataHandler().buildDublinRecordForDocStore(editorForm, uuid);
232 Map parentCriteria = new HashMap();
233 parentCriteria.put("bibliographicRecordStatusCode", bibliographicRecordStatusCode);
234 bibliographicRecordStatus = boService.findByPrimaryKey(OleBibliographicRecordStatus.class, parentCriteria);
235 }
236 Bib bib = null;
237 try {
238 if (uuid != null && !uuid.trim().equals("")) {
239
240 if (boService != null) {
241
242 bib = getDocstoreClientLocator().getDocstoreClient().retrieveBib(bibId);
243 bib.setStaffOnly(staffOnlyFlag);
244 bib.setContent(content);
245 if (bibliographicRecordStatus != null) {
246 bib.setStatus(bibliographicRecordStatus.getBibliographicRecordStatusName());
247 } else {
248 bib.setStatus("");
249 }
250 getDocstoreClientLocator().getDocstoreClient().updateBib(bib);
251 String bibStatusName = bib.getStatus();
252 editorForm.setCreatedBy(bib.getCreatedBy());
253 editorForm.setCreatedDate(bib.getCreatedOn());
254 editorForm.setUpdatedBy(bib.getUpdatedBy());
255 editorForm.setUpdatedDate(bib.getUpdatedOn());
256 editorForm.setStatusUpdatedOn(bib.getStatusUpdatedOn());
257 editorForm.setStatusUpdatedBy(bib.getStatusUpdatedBy());
258 Map parentCriteria = new HashMap();
259 parentCriteria.put("bibliographicRecordStatusName", bibStatusName);
260 bibliographicRecordStatus = boService.findByPrimaryKey(OleBibliographicRecordStatus.class, parentCriteria);
261 if (bibliographicRecordStatus != null) {
262 editorForm.setOleBibliographicRecordStatus(bibliographicRecordStatus);
263 }
264 editorStatusMessage = "record.update.message";
265 }
266 } else {
267 BibTree bibTree = new BibTree();
268 bib = new BibDcUnqualified();
269 bib.setCategory(DocCategory.WORK.getCode());
270 bib.setType(DocType.BIB.getCode());
271 bib.setFormat(org.kuali.ole.docstore.common.document.content.enums.DocFormat.DUBLIN_UNQUALIFIED.getCode());
272 bib.setStaffOnly(staffOnlyFlag);
273 bib.setContent(content);
274 if (bibliographicRecordStatus != null) {
275 bib.setStatus(bibliographicRecordStatus.getBibliographicRecordStatusName());
276 } else {
277 bib.setStatus("");
278 }
279 bibTree.setBib(bib);
280 HoldingsTree holdingsTree = getHoldingsTree(editorForm.geteResourceId());
281 bibTree.getHoldingsTrees().add(holdingsTree);
282
283 getDocstoreClientLocator().getDocstoreClient().createBib(bib);
284 holdingsTree.getHoldings().setBib(bib);
285 getDocstoreClientLocator().getDocstoreClient().createHoldingsTree(holdingsTree);
286 editorForm.setDocId(bib.getId());
287 editorForm.setBibId(bib.getId());
288 List<BibTree> bibTreeList = new ArrayList<>();
289 bibTreeList.add(bibTree);
290 editorForm.setBibTreeList(bibTreeList);
291 editorStatusMessage = "record.create.message";
292 dublinEditorForm.setUuid("");
293
294
295 }
296 } catch (Exception e) {
297 LOG.error("Failed to save record. Cause:" + e.getMessage(), e);
298 dublinEditorForm.setDublinFieldList(Arrays.asList(new WorkDublinEditorField()));
299 dublinEditorForm.setExistingDublinFieldList(new ArrayList<WorkDublinEditorField>());
300 editorStatusMessage = "marc.editor.failure.message";
301 }
302 dublinEditorForm.setViewId("WorkBibDublinEditorViewPage");
303 dublinEditorForm = (WorkBibDublinForm) loadDocument(editorForm);
304 GlobalVariables.getMessageMap().getInfoMessages().clear();
305 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, editorStatusMessage);
306 return dublinEditorForm;
307 }
308
309
310
311
312
313
314
315
316
317
318 @RequestMapping(params = "methodToCall=addField")
319 public ModelAndView addDublinField(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
320 HttpServletRequest request, HttpServletResponse response) {
321 WorkBibDublinForm dublinEditorForm = (WorkBibDublinForm) form;
322 int index = Integer.parseInt(form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
323 index++;
324 List<WorkDublinEditorField> dublinEditorFieldList = dublinEditorForm.getDublinFieldList();
325 dublinEditorFieldList.add(index, new WorkDublinEditorField());
326
327 return null;
328 }
329
330
331
332
333
334
335
336
337
338
339 @RequestMapping(params = "methodToCall=removeField")
340 public ModelAndView removeDublinField(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
341 HttpServletRequest request, HttpServletResponse response) {
342 WorkBibDublinForm dublinEditorForm = (WorkBibDublinForm) form;
343 int index = Integer.parseInt(form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
344 String selectedCollection = form.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
345 List<WorkDublinEditorField> dublinEditorFieldList = dublinEditorForm.getDublinFieldList();
346 List<WorkDublinEditorField> existingEditorFieldList;
347 if (dublinEditorFieldList.size() > 1) {
348 dublinEditorFieldList.remove(index);
349 }
350 if (selectedCollection.equalsIgnoreCase("existingDublinFieldList")) {
351 existingEditorFieldList = dublinEditorForm.getExistingDublinFieldList();
352 if (existingEditorFieldList.size() > 0) {
353 existingEditorFieldList.remove(index);
354 }
355 }
356
357 return null;
358 }
359
360
361
362
363
364
365
366
367
368
369
370
371 @RequestMapping(params = "methodToCall=submit")
372 public ModelAndView submit(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
373 HttpServletRequest request, HttpServletResponse response) {
374 String responseFromDocstore = null;
375 WorkBibDublinForm dublinEditorForm = (WorkBibDublinForm) form;
376 String uuid = dublinEditorForm.getUuid();
377 String content = getDublinEditorFormDataHandler().buildDublinRecordForDocStore(form, uuid);
378 try {
379 if (uuid != null && !uuid.trim().equals("")) {
380 responseFromDocstore = getDocstoreHelperService()
381 .persistToDocstoreForEditor(content, uuid, OLEConstants.UNQUALIFIED_DUBLIN_FORMAT);
382 } else {
383 responseFromDocstore = getDocstoreHelperService()
384 .persistToDocstoreForEditor(content, null, OLEConstants.UNQUALIFIED_DUBLIN_FORMAT);
385 }
386 LOG.debug("responseFromDocstore---->" + responseFromDocstore);
387 dublinEditorForm.setDublinFieldList(Arrays.asList(new WorkDublinEditorField()));
388 dublinEditorForm.setExistingDublinFieldList(new ArrayList<WorkDublinEditorField>());
389 dublinEditorForm.setUuid("");
390
391 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, "record.save.message");
392 } catch (Exception e) {
393 LOG.error("Failed to save record:" + e.getMessage(), e);
394 dublinEditorForm.setDublinFieldList(Arrays.asList(new WorkDublinEditorField()));
395 dublinEditorForm.setExistingDublinFieldList(new ArrayList<WorkDublinEditorField>());
396
397 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, "record.save.fail.message");
398 }
399
400 return null;
401 }
402
403
404
405
406
407
408
409
410
411
412 @RequestMapping(params = "methodToCall=loadDublinRecord")
413 public ModelAndView loadDublinRecord(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
414 HttpServletRequest request, HttpServletResponse response) {
415 WorkBibDublinForm dublinEditorForm = (WorkBibDublinForm) form;
416 String uuid = dublinEditorForm.getUuid();
417 try {
418 String docStoreData = getDocstoreHelperService().getDocstoreData(uuid);
419 UnQualifiedDublinRecord unQualifiedDublinRecord = new UnQualifiedDublinRecordHandler()
420 .fromXML(docStoreData);
421 dublinEditorForm.setExistingDublinFieldList(getDublinEditorFormDataHandler()
422 .buildDublinUnqEditorFields(dublinEditorForm,
423 unQualifiedDublinRecord));
424 dublinEditorForm.setDublinFieldList(
425 new ArrayList<WorkDublinEditorField>(Arrays.asList(new WorkDublinEditorField())));
426
427 } catch (Exception e) {
428 LOG.error("Exception:" + e.getMessage(), e);
429 }
430
431 return null;
432 }
433
434
435
436
437
438
439 private WorkDublinEditorFormDataHandler getDublinEditorFormDataHandler() {
440 if (null == dublinEditorFormDataHandler) {
441 dublinEditorFormDataHandler = new WorkDublinEditorFormDataHandler();
442 }
443 return dublinEditorFormDataHandler;
444 }
445
446
447
448
449
450
451 private DocstoreHelperService getDocstoreHelperService() {
452 if (null == docstoreHelperService) {
453 return new DocstoreHelperService();
454 }
455 return docstoreHelperService;
456 }
457
458
459
460
461
462
463 public void setDocstoreHelperService(DocstoreHelperService docstoreHelperService) {
464 this.docstoreHelperService = docstoreHelperService;
465 }
466
467
468
469
470
471
472
473
474
475
476 protected ModelAndView callSuper(BindingResult result, HttpServletRequest request, HttpServletResponse response,
477 WorkBibDublinForm dublinEditorForm) {
478
479 return null;
480 }
481
482 @Override
483 public EditorForm addORDeleteFields(EditorForm editorForm, HttpServletRequest request) {
484 String methodName = request.getParameter("methodToCall");
485 if (methodName.equalsIgnoreCase("addField")) {
486 WorkBibDublinForm dublinEditorForm = (WorkBibDublinForm) editorForm.getDocumentForm();
487 int index = Integer.parseInt(editorForm.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
488 index++;
489 List<WorkDublinEditorField> dublinEditorFieldList = editorForm.getDublinFieldList();
490 dublinEditorFieldList.add(index, new WorkDublinEditorField());
491 dublinEditorForm.setDublinFieldList(dublinEditorFieldList);
492 editorForm.setDocumentForm(dublinEditorForm);
493 } else if (methodName.equalsIgnoreCase("removeField")) {
494 WorkBibDublinForm dublinEditorForm = (WorkBibDublinForm) editorForm.getDocumentForm();
495 int index = Integer.parseInt(editorForm.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
496 List<WorkDublinEditorField> editorControlFieldList = editorForm.getDublinFieldList();
497 if (editorControlFieldList.size() > 1) {
498 editorControlFieldList.remove(index);
499 }
500 editorForm.setDocumentForm(dublinEditorForm);
501 }
502
503 return editorForm;
504 }
505
506 @Override
507 public EditorForm deleteVerify(EditorForm editorForm) throws Exception {
508 return null;
509 }
510
511 @Override
512 public EditorForm delete(EditorForm editorForm) throws Exception {
513 WorkBibDublinForm workBibDublinForm = new WorkBibDublinForm();
514 String docId = editorForm.getDocId();
515 String operation = "delete";
516 getResponseFromDocStore(editorForm, docId, operation);
517 return workBibDublinForm;
518 }
519
520 @Override
521 public EditorForm addORRemoveExtentOfOwnership(EditorForm editorForm, HttpServletRequest request) {
522 return null;
523 }
524
525 @Override
526 public EditorForm addORRemoveAccessInformationAndHoldingsNotes(EditorForm editorForm, HttpServletRequest request) {
527 return null;
528 }
529
530 @Override
531 public EditorForm addORRemoveItemNote(EditorForm editorForm, HttpServletRequest request) {
532 return null;
533 }
534
535 @Override
536 public EditorForm showBibs(EditorForm editorForm) {
537 return null;
538 }
539
540 public EditorForm copy(EditorForm editorForm) {
541 return null;
542 }
543
544 }