View Javadoc
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   * Created with IntelliJ IDEA.
48   * User: pp7788
49   * Date: 12/11/12
50   * Time: 2:38 PM
51   * To change this template use File | Settings | File Templates.
52   */
53  
54  /**
55   * InstanceEditorController is the controller class for Instance Editor
56   */
57  //@Controller
58  //@RequestMapping(value = "/instanceeditor")
59  public class WorkEInstanceOlemlEditor
60          extends AbstractEditor
61          implements DocumentEditor {
62  
63      private static final Logger LOG = Logger.getLogger(WorkEInstanceOlemlEditor.class);
64  
65      //    private DocstoreHelperService docstoreHelperService;
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 //        workEInstanceOlemlForm.getSelectedEHoldings().setEResourceTitle(null);
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         //editorForm.setMessage("Record copied successfully");
114         //GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, "info.einstance.copy.success");
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                 //getOleEResourceSearchService().getAccessLocationFromEInstance(eHoldings, workEInstanceOlemlForm);
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 //        editorForm.setHeaderText("EInstance Editor (EHoldings) - OLEML Format");
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 //        WorkBibDocument workBibDocument = new WorkBibDocument();
277 //        workBibDocument.setId(editorForm.getBibId());
278 //        QueryService queryService = QueryServiceImpl.getInstance();
279 //        WorkBibDocument document = null;
280 //        try {
281 //            document = queryService.buildBibDocumentInfo(workBibDocument);
282 //        } catch (Exception e) {
283 //            LOG.error("Failed to get Title / Author details : " + e.getMessage());
284 //        }
285 //        StringBuilder titleBuilder = new StringBuilder();
286 //        if (document != null) {
287 //            titleBuilder.append(document.getTitle());
288 //            titleBuilder.append("/");
289 //            if (document.getAuthor() != null) {
290 //                titleBuilder.append(document.getAuthor());
291 //            }
292 //            if (workBibDocument.getDocFormat().equalsIgnoreCase("dublinunq")) {
293 //                editorForm.setFromDublin(true);
294 //            }
295 //            editorForm.setTitle(org.apache.commons.lang.StringEscapeUtils.escapeHtml(titleBuilder.toString()));
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                     // To add updated EHoldings to bib tree
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      * This methods adds the updated EHoldings to the bib tree to build left pane tree.
472      * @param bibTreeList
473      * @param eHoldings
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      * This method creates a instance of InstanceEditorForm
574      *
575      * @param httpServletRequest
576      * @return InstanceEditorForm
577      */
578     protected UifFormBase createInitialForm(HttpServletRequest httpServletRequest) {
579         return new WorkInstanceOlemlForm();
580     }
581 
582     /**
583      * This method takes the initial request when click on InstanceEditor Screen.
584      *
585      * @param form
586      * @param result
587      * @param request
588      * @param response
589      * @return ModelAndView
590      */
591     public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
592                               HttpServletRequest request, HttpServletResponse response) {
593         WorkInstanceOlemlForm instanceEditorForm = (WorkInstanceOlemlForm) form;
594         //ModelAndView modelAndView = super.start(instanceEditorForm, result, request, response);
595         // return getUIFModelAndView(instanceEditorForm, "WorkHoldingsViewPage");
596         return null;
597     }
598 
599 
600     /**
601      * This method will fetch the holding/Item records based on the AdditionalAttributes.
602      *
603      * @param form
604      * @param result
605      * @param request
606      * @param response
607      * @return ModelAndView
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         //EditorForm workInstanceOlemlForm = (WorkInstanceOlemlForm) form;
616         //WorkInstanceOlemlForm workInstanceOlemlForm = new WorkInstanceOlemlForm();
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               /*if (workEInstanceOlemlForm.getInstanceId() != null && workEInstanceOlemlForm.getInstanceId().length() > 0) {
627                 String docStoreData = getDocstoreHelperService().getDocstoreData(docCategory,docType,docFormat,workEInstanceOlemlForm.getInstanceId());
628                 InstanceCollection instanceCollection = new WorkEInstanceOlemlRecordProcessor().fromXML(docStoreData);
629                 workEInstanceOlemlForm.setSelectedEInstance(instanceCollection.getEInstance().get(0));
630             }
631             String docStoreData = getDocstoreHelperService().getDocstoreData(docCategory,docType,docFormat,uuid);
632             if (docType.equalsIgnoreCase("eHoldings")) {
633                 EHoldings oleHoldings = new WorkEHoldingOlemlRecordProcessor().fromXML(docStoreData);
634                 workEInstanceOlemlForm.setSelectedEHoldings(oleHoldings);
635                 //return getUIFModelAndView(workInstanceOlemlForm,"WorkHoldingsViewPage");
636             }
637             else {
638                 InstanceCollection instanceCollection = new WorkEInstanceOlemlRecordProcessor().fromXML(docStoreData);
639                 workEInstanceOlemlForm.setSelectedEHoldings(instanceCollection.getEInstance().get(0).getEHoldings());
640                 //return getUIFModelAndView(workInstanceOlemlForm,"WorkHoldingsViewPage");
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             //workInstanceOlemlForm.setMessage(instanceEditorErrorMessage.toString());
647             LOG.error(instanceEditorErrorMessage);
648             //return getUIFModelAndView(workInstanceOlemlForm);
649         }
650         return null;
651     }
652 
653     /**
654      * Used for Test-case
655      *
656      * @param result
657      * @param request
658      * @param response
659      * @param instanceEditorForm
660      * @return ModelAndView
661      */
662     protected ModelAndView callSuper(BindingResult result, HttpServletRequest request, HttpServletResponse response,
663                                      InstanceEditorForm instanceEditorForm) {
664         //return super.updateComponent(instanceEditorForm, result, request, response);
665         return null;
666     }
667 
668 //    /**
669 //     * Gets the docstoreHelperService attribute
670 //     *
671 //     * @return Returns DocstoreHelperService
672 //     */
673 //    private DocstoreHelperService getDocstoreHelperService() {
674 //        if (null == docstoreHelperService) {
675 //            return new DocstoreHelperService();
676 //        }
677 //        return docstoreHelperService;
678 //    }
679 
680 //    /**
681 //     * Sets the docstoreHelperService attribute values.
682 //     *
683 //     * @param docstoreHelperService
684 //     */
685 //    public void setDocstoreHelperService(DocstoreHelperService docstoreHelperService) {
686 //        this.docstoreHelperService = docstoreHelperService;
687 //    }
688 
689     /**
690      * Gets the InstanceEditorFormDataHandler attribute.
691      *
692      * @return Returns InstanceEditorFormDataHandler.
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 //     * This method returns AdditionalAttributes instance from the list of Extension.
711 //     * @param extensionList
712 //     * @return AdditionalAttributes
713 //     */
714 //    private AdditionalAttributes getFirstAdditionalAttributes(List<Extension> extensionList) {
715 //        for (Extension ext : extensionList) {
716 //            for (Object obj : ext.getContent()) {
717 //                if (obj instanceof AdditionalAttributes) {
718 //                    return (AdditionalAttributes) obj;
719 //                }
720 //            }
721 //        }
722 //        return null;
723 //    }
724 
725     /**
726      * Sets the discoveryHelperService attribute value.
727      *
728      * @param discoveryHelperService
729      */
730     public void setDiscoveryHelperService(DiscoveryHelperService discoveryHelperService) {
731         this.discoveryHelperService = discoveryHelperService;
732     }
733 
734     /**
735      * Gets the discoveryHelperService attribute.
736      *
737      * @return Returns DiscoveryHelperService.
738      */
739     public DiscoveryHelperService getDiscoveryHelperService() {
740         if (null == discoveryHelperService) {
741             return new DiscoveryHelperService();
742         }
743         return discoveryHelperService;
744     }
745 
746     /*@RequestMapping(params = "methodToCall=addExtentOfOwnership")
747     public ModelAndView addExtentOfOwnership(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
748                                              HttpServletRequest request, HttpServletResponse response) {
749         InstanceEditorForm instanceEditorForm = (InstanceEditorForm) form;
750         int index = Integer.parseInt(form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
751         index++;
752         List<ExtentOfOwnership> extentOfOwnershipForUI = instanceEditorForm.getSelectedHolding().getExtentOfOwnership();
753         extentOfOwnershipForUI.add(index, new ExtentOfOwnership());
754         return super.updateComponent(instanceEditorForm, result, request, response);
755     }
756 
757     @RequestMapping(params = "methodToCall=removeExtentOfOwnership")
758     public ModelAndView removeExtentOfOwnership(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
759                                                 HttpServletRequest request, HttpServletResponse response) {
760         InstanceEditorForm instanceEditorForm = (InstanceEditorForm) form;
761         int index = Integer.parseInt(form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
762         List<ExtentOfOwnership> extentOfOwnershipForUI = instanceEditorForm.getSelectedHolding().getExtentOfOwnership();
763         if (extentOfOwnershipForUI.size() > 1)
764             extentOfOwnershipForUI.remove(index);
765         return super.updateComponent(instanceEditorForm, result, request, response);
766     }*/
767 
768 
769   /*  */
770 
771     /**
772      * Shows the linked Bibs corresponging to Holdings/Item
773      *
774      * @param editorForm
775      * @return
776      *//*
777     @Override
778     public EditorForm showBibs(EditorForm editorForm) {
779         WorkEInstanceOlemlForm workEInstanceOlemlForm = new WorkEInstanceOlemlForm();
780         QueryService queryService = QueryServiceImpl.getInstance();
781         List<String> bibUUIDList = new ArrayList<String>();
782         String instanceId = "";
783         String docType = editorForm.getDocType();
784         List<WorkBibDocument> workBibDocumentList = new ArrayList<WorkBibDocument>();
785         try {
786 
787             if ((docType.equalsIgnoreCase(DocType.INSTANCE.getCode()) || docType
788                     .equalsIgnoreCase(DocType.HOLDINGS.getCode())) || (docType
789                     .equalsIgnoreCase(DocType.ITEM.getCode()))) {
790                 instanceId = editorForm.getInstanceId();
791             }
792             if (StringUtils.isNotEmpty(instanceId)) {
793                 bibUUIDList = queryService.queryForBibs(instanceId);
794             }
795             DocstoreHelperService docstoreHelperService = new DocstoreHelperService();
796             if (bibUUIDList != null && bibUUIDList.size() > 0) {
797                 for (String bibUUID : bibUUIDList) {
798                     WorkBibDocument workBibDocument = new WorkBibDocument();
799                     workBibDocument.setId(bibUUID);
800                     workBibDocument = docstoreHelperService.getInfoForBibTree(workBibDocument);
801                     workBibDocumentList.add(workBibDocument);
802                 }
803             }
804 
805             editorForm.setWorkBibDocumentList(workBibDocumentList);
806         } catch (SolrServerException e) {
807             LOG.error("Exception:" + e.getMessage(), e);
808         }
809         workEInstanceOlemlForm.setViewId("ShowBibViewPage");
810         return workEInstanceOlemlForm;
811     }*/
812 
813     /**
814      * This method deletes the EHoldings record from docstore by the doc id.
815      * @param editorForm
816      * @return
817      * @throws Exception
818      */
819     @Override
820     public EditorForm delete(EditorForm editorForm) throws Exception {
821         return deleteFromDocStore(editorForm);
822     }
823 
824     /*@Override
825     public EditorForm delete(EditorForm editorForm) throws Exception {
826         WorkEInstanceOlemlForm workEInstanceOlemlForm = new WorkEInstanceOlemlForm();
827         String operation = OLEConstants.DELETE;
828         BusinessObjectService boService = KRADServiceLocator.getBusinessObjectService();
829         //Map<String, String> map = new HashMap<>();
830         //Map<String, String> uuidMap = new HashMap<>();
831         //map.put("bibId", editorForm.getBibId());
832         //List<OleCopy> listOfValues = (List<OleCopy>) boService.findMatching(OleCopy.class, map);
833 
834         //if (listOfValues != null && listOfValues.size() > 0) {
835         //    GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, OLEConstants.DELETE_PURCHASE_ORDER_FAIL_MESSAGE, "Bib");
836         //    return workEInstanceOlemlForm;
837         //}
838 
839         getResponseFromDocStore(editorForm, editorForm.getDocId(), operation);
840         GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, OLEConstants.RECORD_DELETE_MESSAGE);
841 
842        *//* if (responseXml.contains("Success")) {
843             GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, "record.delete.message");
844             workEInstanceOlemlForm.setShowDeleteTree(false);
845             workEInstanceOlemlForm.setHasLink(false);
846         } else {
847             GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, "record.delete.fail.message");
848         }*//*
849         removeDocumentFromTree(editorForm);
850         editorForm.setShowDeleteTree(false);
851         editorForm.setHasLink(false);
852         workEInstanceOlemlForm.setViewId(OLEConstants.DELETE_VIEW_PAGE);
853         return workEInstanceOlemlForm;
854     }*/
855 
856     /*public boolean validateRequiredFields(WorkEInstanceOlemlForm workEInstanceOlemlForm) {
857         List<Coverage> coverages = workEInstanceOlemlForm.getSelectedEHoldings().getExtentOfOwnership().getCoverages().getCoverage();
858         if (coverages.size() > 0) {
859             for (Coverage coverage : coverages) {
860                 String date = coverage.getCoverageStartDate();
861                 if (date != null && !date.isEmpty()) {
862                     return true;
863                 }
864             }
865         } else {
866             return false;
867         }
868         return false;
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         //List<BibTree> bibTreeList = null;
879         //BibTree bibTree = null;
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            // processResponse(eHoldingsDoc.getId(), eHoldingsDoc.getBib().getId(), editorForm.getTokenId());
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             //bibTree.getHoldingsTrees().addAll(holdingsTreeList);
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 }