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 }