1 package org.kuali.ole.describe.controller;
2
3 import org.apache.commons.collections.CollectionUtils;
4 import org.apache.commons.lang.StringUtils;
5 import org.apache.log4j.Logger;
6 import org.kuali.ole.DocumentUniqueIDPrefix;
7 import org.kuali.ole.OLEConstants;
8 import org.kuali.ole.describe.bo.*;
9 import org.kuali.ole.describe.form.*;
10 import org.kuali.ole.describe.service.DiscoveryHelperService;
11 import org.kuali.ole.docstore.common.client.DocstoreClient;
12 import org.kuali.ole.docstore.common.document.*;
13 import org.kuali.ole.docstore.common.document.HoldingsTree;
14 import org.kuali.ole.docstore.common.document.content.instance.*;
15 import org.kuali.ole.docstore.common.document.content.instance.xstream.HoldingOlemlRecordProcessor;
16 import org.kuali.ole.docstore.common.exception.DocstoreException;
17 import org.kuali.ole.docstore.engine.client.DocstoreLocalClient;
18 import org.kuali.ole.docstore.model.enums.DocCategory;
19 import org.kuali.ole.docstore.model.enums.DocFormat;
20 import org.kuali.ole.docstore.model.enums.DocType;
21 import org.kuali.ole.describe.bo.InstanceEditorFormDataHandler;
22 import org.kuali.ole.describe.form.InstanceEditorForm;
23 import org.kuali.ole.select.bo.OLEEditorResponse;
24 import org.kuali.ole.select.businessobject.*;
25 import org.kuali.ole.select.document.OLEEResourceInstance;
26 import org.kuali.ole.select.document.OLEEResourceRecordDocument;
27 import org.kuali.ole.service.OLEEResourceSearchService;
28 import org.kuali.ole.sys.context.SpringContext;
29 import org.kuali.rice.core.api.exception.RiceRuntimeException;
30 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
31 import org.kuali.rice.kim.api.identity.Person;
32 import org.kuali.rice.kim.api.identity.PersonService;
33 import org.kuali.rice.krad.service.*;
34 import org.kuali.rice.krad.util.GlobalVariables;
35 import org.kuali.rice.krad.util.KRADConstants;
36 import org.kuali.rice.krad.web.form.UifFormBase;
37 import org.springframework.validation.BindingResult;
38 import org.springframework.web.bind.annotation.ModelAttribute;
39 import org.springframework.web.servlet.ModelAndView;
40
41 import javax.servlet.http.HttpServletRequest;
42 import javax.servlet.http.HttpServletResponse;
43 import java.sql.Date;
44 import java.util.*;
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 public class WorkEInstanceOlemlEditor
60 extends AbstractEditor
61 implements DocumentEditor {
62
63 private static final Logger LOG = Logger.getLogger(WorkEInstanceOlemlEditor.class);
64
65
66 private InstanceEditorFormDataHandler instanceEditorFormDataHandler;
67 private EInstanceFormDataHandler eInstanceFormDataHandler;
68 private DiscoveryHelperService discoveryHelperService;
69 private OLEEResourceSearchService oleEResourceSearchService;
70 private DocumentService documentService;
71 private HoldingOlemlRecordProcessor holdingOlemlRecordProcessor = new HoldingOlemlRecordProcessor();
72 private DocstoreClient docstoreClient = getDocstoreLocalClient();
73
74 private static WorkEInstanceOlemlEditor workEInstanceOlemlEditor = new WorkEInstanceOlemlEditor();
75
76 public static WorkEInstanceOlemlEditor getInstance() {
77 return workEInstanceOlemlEditor;
78 }
79
80 public OLEEResourceSearchService getOleEResourceSearchService() {
81 if (oleEResourceSearchService == null) {
82 oleEResourceSearchService = GlobalResourceLoader.getService(OLEConstants.OLEEResourceRecord.ERESOURSE_SEARCH_SERVICE);
83 }
84 return oleEResourceSearchService;
85 }
86
87 public DocumentService getDocumentService() {
88 if (this.documentService == null) {
89 this.documentService = KRADServiceLocatorWeb.getDocumentService();
90 }
91 return this.documentService;
92 }
93
94 public void setDocumentService(DocumentService documentService) {
95 this.documentService = documentService;
96 }
97
98 private WorkEInstanceOlemlEditor() {
99 }
100
101 @Override
102 public EditorForm copy(EditorForm editorForm) {
103 loadDocument(editorForm);
104 WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
105 workEInstanceOlemlForm.getSelectedEHoldings().setEResourceId(workEInstanceOlemlForm.geteResourceId()!=null&&!workEInstanceOlemlForm.geteResourceId().isEmpty()?workEInstanceOlemlForm.geteResourceId():null);
106
107 editorForm.seteResourceId(workEInstanceOlemlForm.geteResourceId()!=null&&!workEInstanceOlemlForm.geteResourceId().isEmpty()?workEInstanceOlemlForm.geteResourceId():null);
108 editorForm.seteResourceTitle(workEInstanceOlemlForm.geteResourceTitle()!=null&&!workEInstanceOlemlForm.geteResourceTitle().isEmpty()?workEInstanceOlemlForm.geteResourceTitle():null);
109 editorForm.setDocId(null);
110 editorForm.setShowEditorFooter(false);
111 editorForm.setFromSearch(false);
112
113
114
115 return editorForm;
116 }
117
118 @Override
119 public EditorForm loadDocument(EditorForm editorForm) {
120 LOG.info("loadDocument in E-Instance Editor");
121 WorkEInstanceOlemlForm workEInstanceOlemlForm = new WorkEInstanceOlemlForm();
122 String docId = editorForm.getDocId();
123 String bibId = editorForm.getBibId();
124 String tokenId = editorForm.getTokenId();
125 workEInstanceOlemlForm.setTokenId(tokenId);
126 workEInstanceOlemlForm.setBibId(bibId);
127 String docType = editorForm.getDocType();
128 editorForm.setHasLink(true);
129 if ((StringUtils.isBlank(editorForm.getTitle()))) {
130 getTitleInfo(editorForm);
131 }
132 if (editorForm.isFromDublin()) {
133 editorForm.setHasLink(false);
134 }
135 if (editorForm.getTitle() != null && editorForm.getTitle().contains("<")) {
136 String title = org.apache.commons.lang.StringEscapeUtils.escapeHtml((editorForm.getTitle()));
137 editorForm.setTitle(title);
138 }
139 editorForm.setShowEditorFooter(false);
140 editorForm.setFromSearch(false);
141 String eResId = null;
142 workEInstanceOlemlForm.seteResourceId(editorForm.geteResourceId());
143 Bib bib = null;
144 List<BibTree> bibTreeList = null;
145 BibTree bibTree = null;
146 if (StringUtils.isNotEmpty(bibId)) {
147 try {
148 bibTree = docstoreClient.retrieveBibTree(bibId);
149 bibTreeList = new ArrayList<>();
150 bibTreeList.add(bibTree);
151 bib = bibTree.getBib();
152 workEInstanceOlemlForm.setBibTreeList(bibTreeList);
153 editorForm.setTitle(bibTree.getBib().getTitle() + " / " + bibTree.getBib().getAuthor());
154 } catch (Exception e) {
155 LOG.error("Exception :", e);
156 e.printStackTrace();
157 }
158 }
159 try {
160 if (docId != null && docId.length() > 0) {
161
162
163 Holdings holdings = docstoreClient.retrieveHoldings(docId);
164 String docStoreData = holdings.getContent();
165 OleHoldings eHoldings = holdingOlemlRecordProcessor.fromXML(docStoreData);
166 if (eResId == null || eResId.length() == 0) {
167 eResId = eHoldings.getEResourceId();
168 workEInstanceOlemlForm.seteResourceId(eResId);
169 }
170 workEInstanceOlemlForm.setHoldingsId(DocumentUniqueIDPrefix.getDocumentId(holdings.getId()));
171 editorForm.setStaffOnlyFlagForHoldings(holdings.isStaffOnly());
172 getOleEResourceSearchService().getEResourcesFields(eResId, eHoldings, workEInstanceOlemlForm);
173 getOleEResourceSearchService().getEResourcesLicenseFields(eResId, workEInstanceOlemlForm);
174 if (eHoldings.getExtentOfOwnership() != null && eHoldings.getExtentOfOwnership().size() > 0
175 && eHoldings.getExtentOfOwnership().get(0).getCoverages() != null
176 && eHoldings.getExtentOfOwnership().get(0).getCoverages().getCoverage().size() == 0) {
177 eHoldings.getExtentOfOwnership().get(0).getCoverages().getCoverage().add(new Coverage());
178 }
179 if (eHoldings.getExtentOfOwnership() != null && eHoldings.getExtentOfOwnership().size() > 0
180 && eHoldings.getExtentOfOwnership().get(0).getPerpetualAccesses() != null
181 && eHoldings.getExtentOfOwnership().get(0).getPerpetualAccesses().getPerpetualAccess().size() == 0) {
182 eHoldings.getExtentOfOwnership().get(0).getPerpetualAccesses().getPerpetualAccess().add(new PerpetualAccess());
183 }
184 if (eHoldings.getNote() != null && eHoldings.getNote().size() == 0) {
185 eHoldings.getNote().add(new Note());
186 }
187
188 if(eHoldings.getLink().size() == 0){
189 List<Link> links = new ArrayList<>();
190 Link link = new Link();
191 link.setText("");
192 link.setUrl("");
193 links.add(link);
194 eHoldings.setLink(links);
195 }
196 workEInstanceOlemlForm.setSelectedEHoldings(eHoldings);
197
198 if(workEInstanceOlemlForm.getSelectedEHoldings() != null && workEInstanceOlemlForm.getSelectedEHoldings().getHoldingsAccessInformation() != null
199 && workEInstanceOlemlForm.getSelectedEHoldings().getHoldingsAccessInformation().getProxiedResource() != null
200 && workEInstanceOlemlForm.getSelectedEHoldings().getHoldingsAccessInformation().getProxiedResource().equalsIgnoreCase(OLEConstants.OLEEResourceRecord.ON)) {
201 workEInstanceOlemlForm.setProxiedResource(true);
202 }
203 workEInstanceOlemlForm.getSelectedEHoldings().setStatusDate(new Date(System.currentTimeMillis()).toString());
204 getEInstanceFormDataHandler().setLocationDetails(workEInstanceOlemlForm);
205 if(editorForm.getMethodToCall().equalsIgnoreCase("copy")){
206 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, "record.copy.message");
207 }
208 else{
209 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, "record.load.message");
210 }
211 editorForm.setHoldingCreatedDate(holdings.getCreatedOn());
212 editorForm.setHoldingCreatedBy(holdings.getCreatedBy());
213 editorForm.setHoldingUpdatedDate(holdings.getUpdatedOn());
214 editorForm.setHoldingUpdatedBy(holdings.getUpdatedBy());
215 getOleEResourceSearchService().getAcquisitionInfoFromPOAndInvoice(docId, workEInstanceOlemlForm);
216 } else {
217 OleHoldings eHoldings = new OleHoldings();
218 eHoldings.setStatusDate(new Date(System.currentTimeMillis()).toString());
219 eHoldings.setEResourceId(editorForm.geteResourceId());
220
221 getOleEResourceSearchService().getEResourcesFields(editorForm.geteResourceId(), eHoldings, workEInstanceOlemlForm);
222 getOleEResourceSearchService().getEResourcesLicenseFields(editorForm.geteResourceId(), workEInstanceOlemlForm);
223 if (eHoldings.getExtentOfOwnership() != null && eHoldings.getExtentOfOwnership().size() > 0
224 && eHoldings.getExtentOfOwnership().get(0).getCoverages() != null
225 && eHoldings.getExtentOfOwnership().get(0).getCoverages().getCoverage().size() == 0) {
226 eHoldings.getExtentOfOwnership().get(0).getCoverages().getCoverage().add(new Coverage());
227 }
228 if (eHoldings.getExtentOfOwnership() != null && eHoldings.getExtentOfOwnership().size() > 0
229 && eHoldings.getExtentOfOwnership().get(0).getPerpetualAccesses() != null
230 && eHoldings.getExtentOfOwnership().get(0).getPerpetualAccesses().getPerpetualAccess().size() == 0) {
231 eHoldings.getExtentOfOwnership().get(0).getPerpetualAccesses().getPerpetualAccess().add(new PerpetualAccess());
232 }
233 if (eHoldings.getNote() != null && eHoldings.getNote().size() == 0) {
234 eHoldings.getNote().add(new Note());
235 }
236 List<Link> links = new ArrayList<>();
237 Link link = new Link();
238 link.setText("");
239 link.setUrl("");
240 links.add(link);
241 eHoldings.setLink(links);
242 workEInstanceOlemlForm.setSelectedEHoldings(eHoldings);
243 workEInstanceOlemlForm.setViewId("WorkEInstanceViewPage");
244 getEInstanceFormDataHandler().setLocationDetails(workEInstanceOlemlForm);
245 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, "eholdings.record.new.load.message");
246 editorForm.setHoldingCreatedDate("");
247 editorForm.setHoldingCreatedBy("");
248 }
249 } catch (DocstoreException e) {
250 LOG.error(e);
251 DocstoreException docstoreException = (DocstoreException) e;
252 if (org.apache.commons.lang3.StringUtils.isNotEmpty(docstoreException.getErrorCode())) {
253 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, docstoreException.getErrorCode());
254 } else {
255 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, e.getMessage());
256 }
257 return workEInstanceOlemlForm;
258 }
259 catch (Exception e) {
260 LOG.error("loadDocument Instance Exception:" + e);
261 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, "record.load.fail.message ");
262 return workEInstanceOlemlForm;
263 }
264 workEInstanceOlemlForm.setViewId("WorkEInstanceViewPage");
265 workEInstanceOlemlForm.setIssn(bib.getIssn());
266 editorForm.seteResourceTitle(workEInstanceOlemlForm.geteResourceTitle());
267
268 editorForm.setHeaderText("EHoldings");
269 if (workEInstanceOlemlForm.getTokenId() != null && !workEInstanceOlemlForm.getTokenId().isEmpty()) {
270 editorForm.setTokenId(workEInstanceOlemlForm.getTokenId());
271 }
272 return workEInstanceOlemlForm;
273 }
274
275 private void getTitleInfo(EditorForm editorForm) {
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297 }
298
299 @Override
300 public EditorForm saveDocument(EditorForm editorForm) {
301 WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
302 String docId = editorForm.getDocId();
303 String docType = editorForm.getDocType();
304 String bibId = editorForm.getBibId();
305 String editorStatusMessage = "";
306 List<BibTree> bibTreeList = null;
307 BibTree bibTree = null;
308 String user = GlobalVariables.getUserSession().getPrincipalName();
309 if (StringUtils.isNotEmpty(bibId)) {
310 try {
311 bibTree = docstoreClient.retrieveBibTree(bibId);
312 bibTreeList = new ArrayList<>();
313 bibTreeList.add(bibTree);
314 workEInstanceOlemlForm.setBibTreeList(bibTreeList);
315 editorForm.setTitle(bibTree.getBib().getTitle() + " / " + bibTree.getBib().getAuthor());
316 } catch (Exception e) {
317 LOG.error("Exception :", e);
318 e.printStackTrace();
319 }
320 }
321 long startTime = System.currentTimeMillis();
322 try {
323 if (docId != null && docId.length() > 0) {
324 OleHoldings eHoldings = workEInstanceOlemlForm.getSelectedEHoldings();
325 boolean dateFlag = getOleEResourceSearchService().validateDates(eHoldings);
326 if (dateFlag) {
327 getOleEResourceSearchService().getEResourcesFields(editorForm.geteResourceId(), eHoldings, workEInstanceOlemlForm);
328 String content = getInstanceEditorFormDataHandler().buildHoldingContent(eHoldings);
329 getOleEResourceSearchService().getEResourcesLicenseFields(editorForm.geteResourceId(), workEInstanceOlemlForm);
330 Holdings eHoldingsDoc = new EHoldings();
331 eHoldingsDoc.setId(editorForm.getDocId());
332 eHoldingsDoc.setType(editorForm.getDocType());
333 eHoldingsDoc.setFormat(editorForm.getDocFormat());
334 eHoldingsDoc.setCategory(editorForm.getDocCategory());
335 eHoldingsDoc.setStaffOnly(editorForm.isStaffOnlyFlagForHoldings());
336 eHoldingsDoc.setUpdatedBy(user);
337 Bib bib = new BibMarc();
338 bib.setId(workEInstanceOlemlForm.getBibId());
339 eHoldingsDoc.setBib(bib);
340 eHoldings = (OleHoldings) holdingOlemlRecordProcessor.fromXML(content);
341 eHoldings = getEHolding(editorForm, eHoldings);
342 String newContent = holdingOlemlRecordProcessor.toXML(eHoldings);
343 eHoldingsDoc.setContent(newContent);
344 docstoreClient.updateHoldings(eHoldingsDoc);
345 workEInstanceOlemlForm.getSelectedEHoldings().setHoldingsIdentifier(eHoldingsDoc.getId());
346
347 addEHoldingsToBibTree(workEInstanceOlemlForm.getBibTreeList(), eHoldingsDoc);
348 editorStatusMessage = "holdings.record.update.message";
349 } else {
350 return workEInstanceOlemlForm;
351 }
352 } else {
353 OleHoldings eHoldings = workEInstanceOlemlForm.getSelectedEHoldings();
354 boolean dateFlag = getOleEResourceSearchService().validateDates(eHoldings);
355 if (dateFlag) {
356 getOleEResourceSearchService().getEResourcesFields(editorForm.geteResourceId(), eHoldings, workEInstanceOlemlForm);
357 getOleEResourceSearchService().getEResourcesLicenseFields(editorForm.geteResourceId(), workEInstanceOlemlForm);
358 String content = getInstanceEditorFormDataHandler().buildHoldingContent(eHoldings);
359 Holdings eHoldingsDoc = new EHoldings();
360 eHoldingsDoc.setCategory(DocCategory.WORK.getCode());
361 eHoldingsDoc.setType(DocType.EHOLDINGS.getCode());
362 eHoldingsDoc.setFormat(DocFormat.OLEML.getCode());
363 eHoldingsDoc.setStaffOnly(editorForm.isStaffOnlyFlagForHoldings());
364 eHoldingsDoc.setCreatedBy(user);
365 Bib bib = new BibMarc();
366 bib.setId(workEInstanceOlemlForm.getBibId());
367 eHoldingsDoc.setBib(bib);
368 eHoldings = (OleHoldings) holdingOlemlRecordProcessor.fromXML(content);
369 eHoldings = getEHolding(editorForm, eHoldings);
370 String newContent = holdingOlemlRecordProcessor.toXML(eHoldings);
371 eHoldingsDoc.setContent(newContent);
372 docstoreClient.createHoldings(eHoldingsDoc);
373 editorForm.setDocId(eHoldingsDoc.getId());
374 workEInstanceOlemlForm.setHoldingsId(DocumentUniqueIDPrefix.getDocumentId(eHoldingsDoc.getId()));
375 processResponse(eHoldingsDoc.getId(), eHoldingsDoc.getBib().getId(), editorForm.getTokenId(), editorForm.getLinkToOrderOption());
376 workEInstanceOlemlForm.getSelectedEHoldings().setHoldingsIdentifier(eHoldingsDoc.getId());
377 HoldingsTree holdingsTree = new HoldingsTree();
378 holdingsTree.setHoldings(eHoldingsDoc);
379 List<HoldingsTree> holdingsTreeList = new ArrayList<>();
380 holdingsTreeList.add(holdingsTree);
381 bibTree.getHoldingsTrees().addAll(holdingsTreeList);
382 editorStatusMessage = "record.create.message";
383 } else {
384 return workEInstanceOlemlForm;
385 }
386 }
387 if(editorForm.getDocId()!=null){
388 Holdings holdingsDoc = docstoreClient.retrieveHoldings(editorForm.getDocId());
389 editorForm.setHoldingUpdatedDate(holdingsDoc.getUpdatedOn());
390 editorForm.setHoldingUpdatedBy(holdingsDoc.getUpdatedBy());
391 editorForm.setHoldingCreatedDate(holdingsDoc.getCreatedOn());
392 editorForm.setHoldingCreatedBy(holdingsDoc.getCreatedBy());
393 }
394
395 }
396 catch (DocstoreException e) {
397 LOG.error(e);
398 DocstoreException docstoreException = (DocstoreException) e;
399 if (org.apache.commons.lang3.StringUtils.isNotEmpty(docstoreException.getErrorCode())) {
400 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, docstoreException.getErrorCode());
401 } else {
402 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, e.getMessage());
403 }
404 return workEInstanceOlemlForm;
405 }
406 catch (Exception e) {
407 LOG.error("Exception :", e);
408 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, "docstore.response", e.getMessage());
409 return workEInstanceOlemlForm;
410
411 }
412 long endTime = System.currentTimeMillis();
413 editorForm.setSolrTime(String.valueOf((endTime-startTime)/1000));
414
415 try {
416 getEInstanceFormDataHandler().setLocationDetails(workEInstanceOlemlForm);
417 String eResId = workEInstanceOlemlForm.geteResourceId();
418 editorForm.seteResourceId(null);
419 workEInstanceOlemlForm.setViewId("WorkEInstanceViewPage");
420
421 GlobalVariables.getMessageMap().getInfoMessages().clear();
422 if (eResId != null && !eResId.isEmpty()) {
423 Map<String, String> tempId = new HashMap<String, String>();
424 tempId.put(OLEConstants.OLEEResourceRecord.ERESOURCE_IDENTIFIER, eResId);
425 OLEEResourceRecordDocument tempDocument = (OLEEResourceRecordDocument) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OLEEResourceRecordDocument.class, tempId);
426
427 Person principalPerson = SpringContext.getBean(PersonService.class).getPerson(GlobalVariables.getUserSession().getPerson().getPrincipalId());
428 tempDocument.setDocumentHeader(SpringContext.getBean(DocumentHeaderService.class).getDocumentHeaderById(tempDocument.getDocumentNumber()));
429 tempDocument.getDocumentHeader().setWorkflowDocument(KRADServiceLocatorWeb.getWorkflowDocumentService().loadWorkflowDocument(tempDocument.getDocumentNumber(), principalPerson));
430 if (tempDocument != null) {
431 try {
432 tempDocument.setSelectInstance(OLEConstants.OLEEResourceRecord.CREATE_NEW_INSTANCE);
433 tempDocument.seteInstanceFlag(true);
434 for (OLEEResourceInstance oleeResourceInstance : tempDocument.getOleERSInstances()) {
435 if (oleeResourceInstance.getInstanceId().equals(editorForm.getDocId())) {
436 processResponse(editorForm.getDocId(), editorForm.getBibId(), tempDocument.getDocumentNumber(), editorForm.getLinkToOrderOption());
437 }
438 }
439 getOleEResourceSearchService().getNewInstance(tempDocument, tempDocument.getDocumentNumber());
440 getDocumentService().updateDocument(tempDocument);
441 } catch (Exception e) {
442 LOG.error("Exception :", e);
443 throw new RiceRuntimeException(
444 "Exception trying to save document: " + tempDocument
445 .getDocumentNumber(), e);
446 }
447 }
448 }
449 }
450 catch (DocstoreException e) {
451 LOG.error(e);
452 DocstoreException docstoreException = (DocstoreException) e;
453 if (org.apache.commons.lang3.StringUtils.isNotEmpty(docstoreException.getErrorCode())) {
454 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, docstoreException.getErrorCode());
455 } else {
456 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, e.getMessage());
457 }
458 return workEInstanceOlemlForm;
459 }
460 catch (Exception e) {
461 LOG.error("Exception :", e);
462 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, "docstore.response", e.getMessage());
463 return workEInstanceOlemlForm;
464 }
465 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, editorStatusMessage);
466
467 return workEInstanceOlemlForm;
468 }
469
470
471
472
473
474
475 private void addEHoldingsToBibTree(List<BibTree> bibTreeList, Holdings eHoldings) {
476 if (CollectionUtils.isNotEmpty(bibTreeList)) {
477 for (BibTree bibTree : bibTreeList) {
478 if (CollectionUtils.isNotEmpty(bibTree.getHoldingsTrees())) {
479 for (HoldingsTree holdingsTree : bibTree.getHoldingsTrees()) {
480 if (null != holdingsTree.getHoldings() && null != eHoldings) {
481 String holdingsId = holdingsTree.getHoldings().getId();
482 String eHoldingsId = eHoldings.getId();
483 if (null != holdingsId && null != eHoldingsId) {
484 if (holdingsId.equals(eHoldingsId)) {
485 holdingsTree.setHoldings(eHoldings);
486 }
487 }
488 }
489 }
490 }
491 }
492 }
493 }
494
495 public void processResponse(String instanceId, String bibId, String tokenId, String linkToOrderOption) throws Exception {
496 OLEEditorResponse oleEditorResponse = new OLEEditorResponse();
497 oleEditorResponse.setTokenId(tokenId);
498 oleEditorResponse.setLinkedInstanceId(instanceId);
499 oleEditorResponse.setBib(docstoreClient.retrieveBib(bibId));
500 oleEditorResponse.setLinkToOrderOption(linkToOrderOption);
501 HashMap<String, OLEEditorResponse> oleEditorResponseMap = new HashMap<String, OLEEditorResponse>();
502 oleEditorResponseMap.put(tokenId, oleEditorResponse);
503 OleDocstoreResponse.getInstance().setEditorResponse(oleEditorResponseMap);
504 }
505 public OleHoldings getEHolding(EditorForm editorForm,OleHoldings eHoldings) {
506 WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
507 if (null != eHoldings.getHoldingsAccessInformation()) {
508 if (workEInstanceOlemlForm.isProxiedResource()) {
509 eHoldings.getHoldingsAccessInformation().setProxiedResource(OLEConstants.OLEEResourceRecord.ON);
510 } else {
511 eHoldings.getHoldingsAccessInformation().setProxiedResource(OLEConstants.OLEEResourceRecord.OFF);
512 }
513 }
514 if(editorForm.getAccessLocationFlag().equalsIgnoreCase(OLEConstants.FALSE) && editorForm.geteResourceTitle() != null){
515 eHoldings.getHoldingsAccessInformation().setAccessLocation(null);
516 }
517 if(editorForm.getStatisticalCodeFlag().equalsIgnoreCase(OLEConstants.FALSE) && editorForm.geteResourceTitle() != null){
518 eHoldings.getStatisticalSearchingCode().setCodeValue(null);
519 }
520 if(editorForm.getNoOfUserFlag().equalsIgnoreCase(OLEConstants.FALSE) && editorForm.geteResourceTitle() != null){
521 eHoldings.getHoldingsAccessInformation().setNumberOfSimultaneousUser(null);
522 }
523 if(editorForm.getAuthenticationTypeFlag().equalsIgnoreCase(OLEConstants.FALSE) && editorForm.geteResourceTitle() != null){
524 eHoldings.getHoldingsAccessInformation().setAuthenticationType(null);
525 }
526 if(editorForm.getPerpetualDateEndFlag().equalsIgnoreCase(OLEConstants.FALSE) && editorForm.geteResourceTitle() != null){
527 for(ExtentOfOwnership extentOfOwnershipList:eHoldings.getExtentOfOwnership()){
528 for(PerpetualAccess perpetualAccess:extentOfOwnershipList.getPerpetualAccesses().getPerpetualAccess()) {
529 perpetualAccess.setPerpetualAccessEndDateString(StringUtils.isNotBlank(perpetualAccess.getPerpetualAccessEndDateString())?perpetualAccess.getPerpetualAccessEndDateString():"");
530 perpetualAccess.setPerpetualAccessEndDateFormat(StringUtils.isNotBlank(perpetualAccess.getPerpetualAccessEndDateFormat())?perpetualAccess.getPerpetualAccessEndDateFormat():"");
531 perpetualAccess.setPerpetualAccessEndIssue(StringUtils.isNotBlank(perpetualAccess.getPerpetualAccessEndIssue())?perpetualAccess.getPerpetualAccessEndIssue():"");
532 perpetualAccess.setPerpetualAccessEndVolume(StringUtils.isNotBlank(perpetualAccess.getPerpetualAccessEndVolume())?perpetualAccess.getPerpetualAccessEndVolume():"");
533 perpetualAccess.setPerpetualAccessEndDate(StringUtils.isNotBlank(perpetualAccess.getPerpetualAccessEndDate())?perpetualAccess.getPerpetualAccessEndDate():"");
534 }
535 }
536 }
537 if(editorForm.getPerpetualDateStartFlag().equalsIgnoreCase(OLEConstants.FALSE) && editorForm.geteResourceTitle() != null){
538 for(ExtentOfOwnership extentOfOwnershipList:eHoldings.getExtentOfOwnership()){
539 for(PerpetualAccess perpetualAccess:extentOfOwnershipList.getPerpetualAccesses().getPerpetualAccess()) {
540 perpetualAccess.setPerpetualAccessStartDateString(StringUtils.isNotBlank(perpetualAccess.getPerpetualAccessStartDateString())?perpetualAccess.getPerpetualAccessStartDateString():"");
541 perpetualAccess.setPerpetualAccessStartDateFormat(StringUtils.isNotBlank(perpetualAccess.getPerpetualAccessStartDateFormat())?perpetualAccess.getPerpetualAccessStartDateFormat():"");
542 perpetualAccess.setPerpetualAccessStartIssue(StringUtils.isNotBlank(perpetualAccess.getPerpetualAccessStartIssue())?perpetualAccess.getPerpetualAccessStartIssue():"");
543 perpetualAccess.setPerpetualAccessStartVolume(StringUtils.isNotBlank(perpetualAccess.getPerpetualAccessStartVolume())?perpetualAccess.getPerpetualAccessStartVolume():"");
544 perpetualAccess.setPerpetualAccessStartDate(StringUtils.isNotBlank(perpetualAccess.getPerpetualAccessStartDate())?perpetualAccess.getPerpetualAccessStartDate():"");
545 }
546 }
547 }
548 if(editorForm.getCoverageDateStartFlag().equalsIgnoreCase(OLEConstants.FALSE) && editorForm.geteResourceTitle() != null){
549 for(ExtentOfOwnership extentOfOwnershipList:eHoldings.getExtentOfOwnership()){
550 for(Coverage coverage:extentOfOwnershipList.getCoverages().getCoverage()) {
551 coverage.setCoverageStartIssue(StringUtils.isNotBlank(coverage.getCoverageStartIssue())?coverage.getCoverageStartIssue():"");
552 coverage.setCoverageStartDateString(StringUtils.isNotBlank(coverage.getCoverageStartDateString())?coverage.getCoverageStartDateString():"");
553 coverage.setCoverageStartDateFormat(StringUtils.isNotBlank(coverage.getCoverageStartDateFormat())?coverage.getCoverageStartDateFormat():"");
554 coverage.setCoverageStartVolume(StringUtils.isNotBlank(coverage.getCoverageStartVolume())?coverage.getCoverageStartVolume():"");
555 coverage.setCoverageStartDate(StringUtils.isNotBlank(coverage.getCoverageStartDate())?coverage.getCoverageStartDate():"");
556 }
557 }
558 }
559 if(editorForm.getCoverageDateEndFlag().equalsIgnoreCase(OLEConstants.FALSE) && editorForm.geteResourceTitle() != null){
560 for(ExtentOfOwnership extentOfOwnershipList:eHoldings.getExtentOfOwnership()){
561 for(Coverage coverage:extentOfOwnershipList.getCoverages().getCoverage()) {
562 coverage.setCoverageEndIssue(StringUtils.isNotBlank(coverage.getCoverageEndIssue())?coverage.getCoverageEndIssue():"");
563 coverage.setCoverageEndDateString(StringUtils.isNotBlank(coverage.getCoverageEndDateString())?coverage.getCoverageEndDateString():"");
564 coverage.setCoverageEndDateFormat(StringUtils.isNotBlank(coverage.getCoverageEndDateFormat())?coverage.getCoverageEndDateFormat():"");
565 coverage.setCoverageEndVolume(StringUtils.isNotBlank(coverage.getCoverageEndVolume())?coverage.getCoverageEndVolume():"");
566 coverage.setCoverageEndDate(StringUtils.isNotBlank(coverage.getCoverageEndDate())?coverage.getCoverageEndDate():"");
567 }
568 }
569 }
570 return eHoldings;
571 }
572
573
574
575
576
577
578 protected UifFormBase createInitialForm(HttpServletRequest httpServletRequest) {
579 return new WorkInstanceOlemlForm();
580 }
581
582
583
584
585
586
587
588
589
590
591 public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
592 HttpServletRequest request, HttpServletResponse response) {
593 WorkInstanceOlemlForm instanceEditorForm = (WorkInstanceOlemlForm) form;
594
595
596 return null;
597 }
598
599
600
601
602
603
604
605
606
607
608
609 public ModelAndView load(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
610 HttpServletRequest request, HttpServletResponse response) {
611 WorkEInstanceOlemlForm workEInstanceOlemlForm = new WorkEInstanceOlemlForm();
612 workEInstanceOlemlForm.setHideFooter(false);
613 workEInstanceOlemlForm.setViewId("WorkEInstanceViewPage");
614 workEInstanceOlemlForm.setMessage("Please enter details for new Item record.");
615
616
617 String uuid = request.getParameter("uuid");
618 String docType = request.getParameter("docType");
619 String docFormat = request.getParameter("docFormat");
620 String docCategory = request.getParameter("docCategory");
621 if (null == uuid || StringUtils.isEmpty(uuid)) {
622 uuid = workEInstanceOlemlForm.getUuid();
623 }
624 workEInstanceOlemlForm.setExisting("true");
625 try {
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642 } catch (Exception e) {
643 LOG.error("Exception :", e);
644 StringBuffer instanceEditorErrorMessage = new StringBuffer(OLEConstants.INSTANCE_EDITOR_LOAD_FAILURE)
645 .append(" :: \n" + e.getMessage());
646
647 LOG.error(instanceEditorErrorMessage);
648
649 }
650 return null;
651 }
652
653
654
655
656
657
658
659
660
661
662 protected ModelAndView callSuper(BindingResult result, HttpServletRequest request, HttpServletResponse response,
663 InstanceEditorForm instanceEditorForm) {
664
665 return null;
666 }
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694 private InstanceEditorFormDataHandler getInstanceEditorFormDataHandler() {
695 if (null == instanceEditorFormDataHandler) {
696 instanceEditorFormDataHandler = new InstanceEditorFormDataHandler();
697 }
698 return instanceEditorFormDataHandler;
699 }
700
701 private EInstanceFormDataHandler getEInstanceFormDataHandler() {
702 if (null == eInstanceFormDataHandler) {
703 eInstanceFormDataHandler = new EInstanceFormDataHandler();
704 }
705 return eInstanceFormDataHandler;
706 }
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730 public void setDiscoveryHelperService(DiscoveryHelperService discoveryHelperService) {
731 this.discoveryHelperService = discoveryHelperService;
732 }
733
734
735
736
737
738
739 public DiscoveryHelperService getDiscoveryHelperService() {
740 if (null == discoveryHelperService) {
741 return new DiscoveryHelperService();
742 }
743 return discoveryHelperService;
744 }
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819 @Override
820 public EditorForm delete(EditorForm editorForm) throws Exception {
821 return deleteFromDocStore(editorForm);
822 }
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871 @Override
872 public EditorForm bulkUpdate(EditorForm editorForm, List<String> ids) {
873 WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
874 String docId = editorForm.getDocId();
875 String docType = editorForm.getDocType();
876 String bibId = editorForm.getBibId();
877 String editorStatusMessage = "";
878
879
880 try {
881 OleHoldings eHoldings = workEInstanceOlemlForm.getSelectedEHoldings();
882 getOleEResourceSearchService().getEResourcesFields(editorForm.geteResourceId(), eHoldings, workEInstanceOlemlForm);
883 getOleEResourceSearchService().getEResourcesLicenseFields(editorForm.geteResourceId(), workEInstanceOlemlForm);
884 String content = getInstanceEditorFormDataHandler().buildHoldingContent(eHoldings);
885 Holdings eHoldingsDoc = new EHoldings();
886 eHoldingsDoc.setCategory(DocCategory.WORK.getCode());
887 eHoldingsDoc.setType(DocType.EHOLDINGS.getCode());
888 eHoldingsDoc.setFormat(DocFormat.OLEML.getCode());
889 String canUpdateStaffOnlyFlag = "false";
890 if (editorForm.getStaffOnlyFlagInGlobalEdit() != null && editorForm.getStaffOnlyFlagInGlobalEdit().equalsIgnoreCase("Y")) {
891 canUpdateStaffOnlyFlag = "true";
892 editorForm.setStaffOnlyFlagForHoldings(true);
893 eHoldingsDoc.setStaffOnly(editorForm.isStaffOnlyFlagForHoldings());
894 }
895 else if (editorForm.getStaffOnlyFlagInGlobalEdit() != null && editorForm.getStaffOnlyFlagInGlobalEdit().equalsIgnoreCase("N")) {
896 canUpdateStaffOnlyFlag = "true";
897 editorForm.setStaffOnlyFlagForHoldings(false);
898 eHoldingsDoc.setStaffOnly(editorForm.isStaffOnlyFlagForHoldings());
899 }
900 eHoldingsDoc.setStaffOnly(editorForm.isStaffOnlyFlagForHoldings());
901 Bib bib = new BibMarc();
902 bib.setId(workEInstanceOlemlForm.getBibId());
903 eHoldingsDoc.setBib(bib);
904 eHoldingsDoc.setContent(content);
905 getDocstoreClientLocator().getDocstoreClient().bulkUpdateHoldings(eHoldingsDoc,ids,canUpdateStaffOnlyFlag);
906 editorForm.setDocId(eHoldingsDoc.getId());
907
908 workEInstanceOlemlForm.getSelectedEHoldings().setHoldingsIdentifier(eHoldingsDoc.getId());
909 HoldingsTree holdingsTree = new HoldingsTree();
910 holdingsTree.setHoldings(eHoldingsDoc);
911 List<HoldingsTree> holdingsTreeList = new ArrayList<>();
912 holdingsTreeList.add(holdingsTree);
913
914 editorStatusMessage = "record.create.message";
915 }
916 catch (DocstoreException e) {
917 LOG.error(e);
918 DocstoreException docstoreException = (DocstoreException) e;
919 if (org.apache.commons.lang3.StringUtils.isNotEmpty(docstoreException.getErrorCode())) {
920 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, docstoreException.getErrorCode());
921 } else {
922 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, e.getMessage());
923 }
924 return workEInstanceOlemlForm;
925 }
926 catch (Exception e) {
927 LOG.error("Exception :", e);
928 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, "docstore.response", e.getMessage());
929 return workEInstanceOlemlForm;
930
931 }
932
933
934 try {
935 getEInstanceFormDataHandler().setLocationDetails(workEInstanceOlemlForm);
936 String eResId = workEInstanceOlemlForm.geteResourceId();
937 editorForm.seteResourceId(null);
938 workEInstanceOlemlForm.setViewId("WorkEInstanceViewPage");
939
940 GlobalVariables.getMessageMap().getInfoMessages().clear();
941 }
942 catch (DocstoreException e) {
943 LOG.error(e);
944 DocstoreException docstoreException = (DocstoreException) e;
945 if (org.apache.commons.lang3.StringUtils.isNotEmpty(docstoreException.getErrorCode())) {
946 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, docstoreException.getErrorCode());
947 } else {
948 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, e.getMessage());
949 }
950 return workEInstanceOlemlForm;
951 }
952 catch (Exception e) {
953 LOG.error("Exception :", e);
954 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, "docstore.response", e.getMessage());
955 return workEInstanceOlemlForm;
956 }
957 GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, editorStatusMessage);
958
959 return workEInstanceOlemlForm;
960 }
961
962 }