View Javadoc

1   package org.kuali.ole.describe.controller;
2   
3   import com.lowagie.text.*;
4   import com.lowagie.text.pdf.PdfPCell;
5   import com.lowagie.text.pdf.PdfPTable;
6   import com.lowagie.text.pdf.PdfWriter;
7   import org.apache.commons.collections.CollectionUtils;
8   import org.apache.commons.lang.StringUtils;
9   import org.apache.log4j.Logger;
10  import org.kuali.ole.OLEConstants;
11  import org.kuali.ole.describe.bo.EditorFormDataHandler;
12  import org.kuali.ole.describe.bo.SearchResultDisplayRow;
13  import org.kuali.ole.describe.bo.marc.structuralfields.LeaderField;
14  import org.kuali.ole.describe.bo.marc.structuralfields.controlfield006.ControlField006;
15  import org.kuali.ole.describe.bo.marc.structuralfields.controlfield008.ControlField008;
16  import org.kuali.ole.describe.bo.marc.structuralfields.controlfield007.ControlField007;
17  import org.kuali.ole.describe.form.EditorForm;
18  import org.kuali.ole.describe.form.WorkBibMarcForm;
19  import org.kuali.ole.describe.form.WorkEInstanceOlemlForm;
20  import org.kuali.ole.describe.form.WorkInstanceOlemlForm;
21  import org.kuali.ole.describe.service.DiscoveryHelperService;
22  import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
23  import org.kuali.ole.docstore.common.document.BibTree;
24  import org.kuali.ole.docstore.common.document.content.instance.Coverage;
25  import org.kuali.ole.docstore.common.document.content.instance.DonorInfo;
26  import org.kuali.ole.docstore.common.document.content.instance.Note;
27  import org.kuali.ole.docstore.common.document.content.instance.PerpetualAccess;
28  import org.kuali.ole.docstore.common.search.*;
29  import org.kuali.ole.docstore.model.bo.WorkBibDocument;
30  import org.kuali.ole.docstore.model.bo.WorkInstanceDocument;
31  import org.kuali.ole.docstore.model.bo.WorkItemDocument;
32  import org.kuali.ole.docstore.model.enums.DocFormat;
33  import org.kuali.ole.docstore.model.enums.DocType;
34  import org.kuali.ole.select.bo.OLEDonor;
35  import org.kuali.ole.sys.context.SpringContext;
36  import org.kuali.rice.core.api.config.property.ConfigContext;
37  import org.kuali.rice.kim.api.permission.PermissionService;
38  import org.kuali.rice.kim.api.services.KimApiServiceLocator;
39  import org.kuali.rice.krad.service.KRADServiceLocator;
40  import org.kuali.rice.krad.uif.UifParameters;
41  import org.kuali.rice.krad.uif.container.CollectionGroup;
42  import org.kuali.rice.krad.uif.util.ObjectPropertyUtils;
43  import org.kuali.rice.krad.uif.view.View;
44  import org.kuali.rice.krad.util.GlobalVariables;
45  import org.kuali.rice.krad.web.controller.UifControllerBase;
46  import org.kuali.rice.krad.web.form.UifFormBase;
47  import org.springframework.stereotype.Controller;
48  import org.springframework.validation.BindingResult;
49  import org.springframework.web.bind.annotation.ModelAttribute;
50  import org.springframework.web.bind.annotation.RequestMapping;
51  import org.springframework.web.servlet.ModelAndView;
52  
53  import javax.servlet.http.HttpServletRequest;
54  import javax.servlet.http.HttpServletResponse;
55  import java.io.IOException;
56  import java.io.OutputStream;
57  import java.util.*;
58  import java.util.List;
59  
60  /**
61   * Created with IntelliJ IDEA.
62   * User: PP7788
63   * Date: 12/6/12
64   * Time: 4:34 PM
65   * To change this template use File | Settings | File Templates.
66   */
67  
68  @Controller
69  @RequestMapping(value = "/editorcontroller")
70  
71  public class EditorController extends UifControllerBase {
72  
73      private DocumentEditor editor;
74      private EditorFormDataHandler editorFormDataHandler;
75      private DiscoveryHelperService discoveryHelperService;
76      private boolean isFormInitialized = false;
77      private DocstoreClientLocator docstoreClientLocator;
78      public DocstoreClientLocator getDocstoreClientLocator() {
79          if (null == docstoreClientLocator) {
80              return SpringContext.getBean(DocstoreClientLocator.class);
81          }
82          return docstoreClientLocator;
83      }
84  
85      private static final Logger LOG = Logger.getLogger(EditorController.class);
86  
87      private boolean canDeleteItem(String principalId) {
88          PermissionService service = KimApiServiceLocator.getPermissionService();
89          return service.hasPermission(principalId, OLEConstants.CAT_NAMESPACE, OLEConstants.INSTANCE_EDITOR_DELETE_ITEM);
90      }
91  
92      private boolean canDeleteInstance(String principalId) {
93          PermissionService service = KimApiServiceLocator.getPermissionService();
94          return service.hasPermission(principalId, OLEConstants.CAT_NAMESPACE, OLEConstants.INSTANCE_EDITOR_DELETE_INSTANCE);
95      }
96  
97      private boolean canAddItem(String principalId) {
98          PermissionService service = KimApiServiceLocator.getPermissionService();
99          return service.hasPermission(principalId, OLEConstants.CAT_NAMESPACE, OLEConstants.INSTANCE_EDITOR_ADD_ITEM);
100     }
101 
102     private boolean canDeleteEInstance(String principalId) {
103         PermissionService service = KimApiServiceLocator.getPermissionService();
104         return service.hasPermission(principalId, OLEConstants.CAT_NAMESPACE, OLEConstants.INSTANCE_EDITOR_DELETE_EINSTANCE);
105     }
106 
107     @Override
108     protected UifFormBase createInitialForm(HttpServletRequest httpServletRequest) {
109         UifFormBase uifFormBase = null;
110         uifFormBase = new EditorForm();
111         return uifFormBase;
112     }
113 
114     @RequestMapping(params = "methodToCall=copy")
115     public ModelAndView copy(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
116                              HttpServletRequest request, HttpServletResponse response) {
117         if (!isFormInitialized) {
118             super.start(form, result, request, response);
119             isFormInitialized = true;
120         }
121         EditorForm editorForm = (EditorForm) form;
122         ModelAndView modelAndView = null;
123         String docCategory = request.getParameter("docCategory");
124         String docType = request.getParameter("docType");
125         String docFormat = request.getParameter("docFormat");
126         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
127                 .getDocumentEditor(docCategory, docType, docFormat);
128         editorForm = documentEditor.copy((EditorForm) form);
129         modelAndView = getUIFModelAndView(editorForm, "WorkEInstanceViewPage");
130         return modelAndView;
131     }
132 
133     @Override
134     @RequestMapping(params = "methodToCall=start")
135     public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
136                               HttpServletRequest request, HttpServletResponse response) {
137 
138         if (!isFormInitialized) {
139             super.start(form, result, request, response);
140             isFormInitialized = true;
141         }
142         EditorForm editorForm = (EditorForm) form;
143         ModelAndView modelAndView = null;
144         // get the document details from request and set them in the form.
145         String docCategory = request.getParameter("docCategory");
146         String docType = request.getParameter("docType");
147         String docFormat = request.getParameter("docFormat");
148         String docId = request.getParameter("docId");
149         String bibId = request.getParameter("bibId");
150         String instanceId = request.getParameter("instanceId");
151         String editable = request.getParameter("editable");
152         String callNumberFlag = request.getParameter("isCallNumberFlag");
153 
154 
155         if (null == editable || editable.length() > 0) {
156             editable = "true";
157         }
158 
159         if (docFormat == null || docFormat.length() == 0) {
160             docFormat = ((EditorForm) form).getDocFormat();
161         }
162         if (docId == null || docId.length() == 0) {
163             docId = ((EditorForm) form).getDocId();
164         }
165 
166         if (docType.equalsIgnoreCase("item")) {
167             ((EditorForm) form).setItemLocalIdentifier(docId);
168         }
169 
170         /* if (docType.equalsIgnoreCase("holdings")) {
171             ((EditorForm) form).setHoldingLocalIdentifier(docId);
172         }*/
173 
174         ((EditorForm) form).setEditable(editable);
175         ((EditorForm) form).setDocCategory(docCategory);
176         ((EditorForm) form).setDocType(docType);
177         ((EditorForm) form).setDocFormat(docFormat);
178 
179         if (docFormat.equals(DocFormat.MARC.getCode())) {
180             editorForm.setDocumentForm(new WorkBibMarcForm());
181             modelAndView = getUIFModelAndView(form, "WorkBibEditorViewPage");
182         } else if (docType.equals(DocType.INSTANCE.getCode()) || docType.equals(DocType.INSTANCE.getCode())) {
183             editorForm.setDocumentForm(new WorkInstanceOlemlForm());
184             modelAndView = getUIFModelAndView(form, "WorkHoldingsViewPage");
185         } else if (docType.equals(DocType.ITEM.getCode())) {
186             editorForm.setDocumentForm(new WorkInstanceOlemlForm());
187             modelAndView = getUIFModelAndView(form, "WorkItemViewPage");
188         }
189         return modelAndView;
190     }
191 
192     /**
193      * Load a (new or existing) document in the editor.
194      *
195      * @param form
196      * @param result
197      * @param request
198      * @param response
199      * @return
200      */
201     @RequestMapping(params = "methodToCall=load")
202     public ModelAndView load(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
203                              HttpServletRequest request, HttpServletResponse response) {
204 
205         String tokenId = request.getParameter("tokenId");
206         EditorForm editorForm = (EditorForm) form;
207         if (tokenId != null) {
208             editorForm.setTokenId(tokenId);
209         }
210         if(editorForm.getBibId() == null) {
211             request.getSession().removeAttribute("treeDocumentList");
212         }
213         if (!isFormInitialized) {
214             super.start(form, result, request, response);
215             isFormInitialized = true;
216         }
217 
218         // get the document details from request and set them in the form.
219         String docCategory = request.getParameter("docCategory");
220         String docType = request.getParameter("docType");
221         String docFormat = request.getParameter("docFormat");
222         String docId = request.getParameter("docId");
223         String bibId = request.getParameter("bibId");
224         String instanceId = request.getParameter("instanceId");
225         String editable = request.getParameter("editable");
226         String callNumberFlag = request.getParameter("isCallNumberFlag");
227         String eResourceId = request.getParameter("eResourceId");
228         String holdingsId = request.getParameter("holdingsId");
229 
230         //Verifying editable at form object
231         if ((null == editable) || (editable.length() == 0)) {
232             editable = ((EditorForm) form).getEditable();
233         }
234 
235         //Default value for editable field if it is null
236         if (null == editable || editable.length() == 0) {
237             editable = "true";
238         }
239 
240         /*if (docType.equalsIgnoreCase("item")) {
241             ((EditorForm) form).setItemLocalIdentifier(docId);
242         }*/
243 
244         if (docType.equalsIgnoreCase("holdings")) {
245 
246             ((EditorForm) form).setInstanceId(docId);
247         }
248         if (docType.equalsIgnoreCase("instance")) {
249             ((EditorForm) form).setInstanceId(docId);
250         }
251         ((EditorForm) form).setEditable(editable);
252         ((EditorForm) form).setDocCategory(docCategory);
253         ((EditorForm) form).setDocType(docType);
254         ((EditorForm) form).setDocFormat(docFormat);
255         ((EditorForm) form).setDocId(docId);
256         ((EditorForm) form).setBibId(bibId);
257         ((EditorForm) form).setCallNumberFlag(callNumberFlag);
258         ((EditorForm) form).setHideFooter(true);
259         boolean canDelete = canDeleteItem(GlobalVariables.getUserSession().getPrincipalId()) && canDeleteInstance(GlobalVariables.getUserSession().getPrincipalId());
260         ((EditorForm) form).setCanDelete(canDelete);
261         boolean canAdd = canAddItem(GlobalVariables.getUserSession().getPrincipalId());
262         ((EditorForm) form).setCanAdd(canAdd);
263         boolean canDeleteEInstance = canDeleteEInstance(GlobalVariables.getUserSession().getPrincipalId());
264         ((EditorForm) form).setCanDeleteEInstance(canDeleteEInstance);
265 
266         if (eResourceId != null) {
267             ((EditorForm) form).seteResourceId(eResourceId);
268         }
269         if (holdingsId != null) {
270             ((EditorForm) form).setHoldingsId(holdingsId);
271         }
272         // Identify the document editor to be used for the requested document.
273         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
274                 .getDocumentEditor(docCategory, docType, docFormat);
275 
276         // TODO: Need to save the editorForm in the session.
277         // Get documentList from session.
278         /*List<WorkBibDocument> workBibDocumentList = (List) request.getSession().getAttribute("treeDocumentList");
279         if (null != workBibDocumentList) {
280             ((EditorForm) form).setWorkBibDocumentList(workBibDocumentList);
281         }*/
282 
283         List<BibTree> bibTreeList = (List) request.getSession().getAttribute("treeDocumentList");
284         if (null != bibTreeList) {
285            ((EditorForm) form).setBibTreeList(bibTreeList);
286         }
287 
288 
289         EditorForm documentForm = null;
290         //get request object fromm session and build new work bib marc record.
291         if (request.getSession() != null && request.getSession().getAttribute("bibTree") != null &&
292                 "true".equalsIgnoreCase(request.getParameter("loadFromSession"))) {
293             BibTree bibTree = (BibTree) request.getSession().getAttribute("bibTree");
294             if (docId != null && docId.length() > 0 && !docId.equalsIgnoreCase("null")) {
295                 ((EditorForm) form).setShowLeftPane(false);
296             } else {
297                 ((EditorForm) form).setShowLeftPane(false);
298                 ((EditorForm) form).setShowEditorFooter(false);
299             }
300             documentForm = documentEditor.createNewRecord((EditorForm) form, bibTree);
301         } else {
302             // Send the input through one (request)form and get the output through another (response) form.
303             documentForm = documentEditor.loadDocument((EditorForm) form);
304         }
305 
306         // Set the output (response) form containing document info into the current form.
307         ((EditorForm) form).setDocumentForm(documentForm);
308         // Set documentlist to session.
309         request.getSession().setAttribute("treeDocumentList", ((EditorForm) form).getDocumentForm().getBibTreeList());
310 
311         // Build or update left pane data (tree structure of documents)
312         getEditorFormDataHandler().buildLeftPaneData((EditorForm) form);
313 
314         // Return the next view to be shown to user.
315         ModelAndView modelAndView = getUIFModelAndView(form, documentForm.getViewId());
316         return modelAndView;
317     }
318 
319     @RequestMapping(params = "methodToCall=updateLeftPane")
320     public ModelAndView updateLeftPane(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
321                                        HttpServletRequest request, HttpServletResponse response) {
322         EditorForm editorForm = (EditorForm) form;
323         String hiddenVal = editorForm.getHdnUuid();
324         int hdnIndex = editorForm.getHdnIndex();
325         DiscoveryHelperService discoveryHelperService = getDiscoveryHelperService();
326         List responseFromSOLR = discoveryHelperService.getResponseFromSOLR("id", hiddenVal);
327         String docType = null;
328         for (Iterator iterator = responseFromSOLR.iterator(); iterator.hasNext(); ) {
329             Map map = (Map) iterator.next();
330             if (map.containsKey(OLEConstants.DOC_TYPE)) {
331                 String list = (String) map.get(OLEConstants.DOC_TYPE);
332                 docType = list;
333                 break;
334             }
335         }
336         if ((docType.toString().equals(OLEConstants.ITEM_DOC_TYPE))) {
337             WorkInstanceOlemlForm instanceEditorForm = new WorkInstanceOlemlForm();
338             //instanceEditorForm.setInstance(editorForm.getInstance());
339             //instanceEditorForm.setUuid(editorForm.getInstance().getInstanceIdentifier());
340             //editor = new WorkInstanceOlemlEditor();
341             //instanceEditorForm.setSelectedItem(editorForm.getInstance().getItems().getItem().get(hdnIndex));
342             //return getUIFModelAndView(editorForm, "WorkItemViewPage");
343             //ModelAndView modelAndView = editor.load(form, result, request, response);
344             //return modelAndView;
345             return null;
346         } else {
347             //editorForm.setSelectedHolding(editorForm.getInstance().getOleHoldings());
348             return getUIFModelAndView(editorForm, "WorkHoldingsViewPage");
349         }
350     }
351 
352     public DiscoveryHelperService getDiscoveryHelperService() {
353         if (null == discoveryHelperService) {
354             return new DiscoveryHelperService();
355         }
356         return discoveryHelperService;
357     }
358 
359     public EditorFormDataHandler getEditorFormDataHandler() {
360         if (null == editorFormDataHandler) {
361             editorFormDataHandler = new EditorFormDataHandler();
362         }
363         return editorFormDataHandler;
364     }
365 
366     @RequestMapping(params = "methodToCall=EditNewInstance")
367     public ModelAndView EditNewInstance(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
368                                         HttpServletRequest request, HttpServletResponse response) {
369 
370         EditorForm editorForm = (EditorForm) form;
371         // get request object from session
372         BibTree bibTree = (BibTree) request.getSession().getAttribute("bibTree");
373         // Get documentList from session.
374         /*List<WorkBibDocument> workBibDocumentList = (List) request.getSession().getAttribute("treeDocumentList");
375         if (null != workBibDocumentList) {
376             ((EditorForm) form).setWorkBibDocumentList(workBibDocumentList);
377         }*/
378         if (editorForm.getDocumentForm().getViewId().equalsIgnoreCase("WorkHoldingsViewPage")) {
379             // call instance editor
380             DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
381                     .getDocumentEditor("work", "item", "oleml");
382             // set item record to display on item tab
383             editorForm = documentEditor.createNewRecord((EditorForm) form, bibTree);
384             editorForm.setNeedToCreateInstance(false);
385 
386         } else {
387             // call bib editor to store bib data
388             DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
389                     .getDocumentEditor("work", "bibliographic", "marc");
390             // update request object with modified marc data.
391             EditorForm marcEditorForm = documentEditor.editNewRecord(editorForm, bibTree);
392 
393             // validate bib before going to instance
394             if (!marcEditorForm.isValidInput()) {
395                 return getUIFModelAndView(form, marcEditorForm.getViewId());
396             }
397 
398             // call instance editor and set holding record to display on holding tab
399             documentEditor = DocumentEditorFactory.getInstance().getDocumentEditor("work", "holdings", "oleml");
400             ((EditorForm) form).setDocCategory("work");
401             ((EditorForm) form).setDocType("holdings");
402             ((EditorForm) form).setDocFormat("oleml");
403             editorForm = documentEditor.createNewRecord((EditorForm) form, bibTree);
404         }
405 
406         // Set the output (response) form containing document info into the current form.
407         ((EditorForm) form).setDocumentForm(editorForm);
408         // Set documentlist to session.
409         //request.getSession().setAttribute("treeDocumentList", ((EditorForm) form).getWorkBibDocumentList());
410 
411         // Build or update left pane data (tree structure of documents)
412         getEditorFormDataHandler().buildLeftPaneData((EditorForm) form);
413 
414         // Return the next view to be shown to user.
415         ModelAndView modelAndView = getUIFModelAndView(form, editorForm.getViewId());
416         return modelAndView;
417 
418     }
419 
420     @RequestMapping(params = "methodToCall=save")
421     public ModelAndView save(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
422                              HttpServletRequest request, HttpServletResponse response) {
423 
424         if (request.getSession() != null && request.getSession().getAttribute("bibTree") != null) {
425             DocumentEditor documentEditor = null;
426             if(((EditorForm) form).getDocId() == null || "null".equalsIgnoreCase(((EditorForm) form).getDocId())) {
427                 documentEditor = DocumentEditorFactory.getInstance()
428                         .getDocumentEditor("work", "item", "oleml");
429             }
430             else {
431                 documentEditor = DocumentEditorFactory.getInstance()
432                         .getDocumentEditor("work", "bibliographic", "marc");
433             }
434 
435             BibTree bibTree = (BibTree) request.getSession().getAttribute("bibTree");
436             EditorForm editorForm = documentEditor.editNewRecord((EditorForm) form, bibTree);
437 
438             // validate user entered item data before saving to docstore.
439             if (!editorForm.isValidInput()) {
440                 return getUIFModelAndView(form, editorForm.getViewId());
441             }
442 
443             String responseFromDocstore = documentEditor.saveDocument(bibTree, (EditorForm) form);
444             if (StringUtils.isNotEmpty(responseFromDocstore) && responseFromDocstore.contains("success")) {
445                 request.getSession().setAttribute("responseBibTree", bibTree);
446 
447                 String url = ConfigContext.getCurrentContextConfig().getProperty("ole.rice2.url.base");
448                 url=url + "/portal.do?channelTitle=Import Bib&channelUrl=" + url +
449                         "/ole-kr-krad/importBibController?viewId=ImportBibView&methodToCall=viewRecordNext";
450                 return performRedirect(editorForm, url);
451             }
452         } else {
453             if (!isFormInitialized) {
454                 super.start(form, result, request, response);
455                 isFormInitialized = true;
456             }
457 
458             // get the document details from request and set them in the form.
459             String docCategory = request.getParameter("docCategory");
460             String docType = request.getParameter("docType");
461             String docFormat = request.getParameter("docFormat");
462             String docId = request.getParameter("docId");
463             String bibId = request.getParameter("bibId");
464             String instanceId = request.getParameter("instanceId");
465 
466             String editable = request.getParameter("editable");
467 
468             if (docType != null && docType.equalsIgnoreCase("item")) {
469                 ((EditorForm) form).setItemLocalIdentifier(docId);
470             }
471 
472             /* if (docType != null && docType.equalsIgnoreCase("holdings")) {
473                 ((EditorForm) form).setHoldingLocalIdentifier(docId);
474             }*/
475 
476             if ((null == editable) || (editable.length() == 0)) {
477                 editable = "true";
478             }
479             if (docCategory == null || docCategory.length() == 0) {
480                 docCategory = ((EditorForm) form).getDocCategory();
481             }
482             if (docType == null || docType.length() == 0) {
483                 docType = ((EditorForm) form).getDocType();
484             }
485 
486             if (docFormat == null || docFormat.length() == 0) {
487                 docFormat = ((EditorForm) form).getDocFormat();
488             }
489             if (docId == null || docId.length() == 0) {
490                 docId = ((EditorForm) form).getDocId();
491             }
492 
493             ((EditorForm) form).setEditable(editable);
494             ((EditorForm) form).setDocCategory(docCategory);
495             ((EditorForm) form).setDocType(docType);
496             ((EditorForm) form).setDocFormat(docFormat);
497             ((EditorForm) form).setDocId(docId);
498             ((EditorForm) form).setBibId(bibId);
499             ((EditorForm) form).setInstanceId(instanceId);
500 
501             // Identify the document editor to be used for the requested document.
502             DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
503                     .getDocumentEditor(docCategory, docType, docFormat);
504 
505             // TODO: Need to save the editorForm in the session.
506             // Get documentList from session.
507            /* List<WorkBibDocument> workBibDocumentList = (List) request.getSession().getAttribute("treeDocumentList");
508             if (null != workBibDocumentList) {
509                 ((EditorForm) form).setWorkBibDocumentList(workBibDocumentList);
510             }*/
511 
512             List<BibTree> bibTreeList = (List) request.getSession().getAttribute("treeDocumentList");
513             if (null != bibTreeList) {
514                 ((EditorForm) form).getDocumentForm().setBibTreeList(bibTreeList);
515                 ((EditorForm) form).setBibTreeList(bibTreeList);
516             }
517 
518             if (documentEditor.isValidUpdate((EditorForm) form)  ||  ((EditorForm) form).getAllowUpdate().equals
519                     ("true")) {
520                 // Send the input through one (request)form and get the output through another (response) form.
521                 EditorForm documentForm = documentEditor.saveDocument((EditorForm) form);
522                 // Set the output (response) form containing docum ((EditorForm) form).isAllowUpdate()ent info into the current form.
523                 ((EditorForm) form).setDocumentForm(documentForm);
524                 ((EditorForm) form).setAllowUpdate(" ");
525             } else{
526                 ((EditorForm) form).setAllowUpdate("false");
527             }
528 
529 
530             // Set documentlist to session.
531             request.getSession().setAttribute("treeDocumentList", ((EditorForm) form).getDocumentForm().getBibTreeList());
532 
533             // Build or update left pane data (tree structure of documents)
534             getEditorFormDataHandler().buildLeftPaneData((EditorForm) form);
535 
536         }
537         ((EditorForm) form).setDisplayField006("false");
538         ((EditorForm) form).setDisplayField007("false");
539         ((EditorForm) form).setDisplayField008("false");
540         // Return the next view to be shown to user.
541         ModelAndView modelAndView = getUIFModelAndView(form, ((EditorForm) form).getDocumentForm().getViewId());
542         return modelAndView;
543     }
544 
545     /**
546      * This method will add the controlField 006 record based on the selected Line index and updates the component.
547      *
548      * @param form
549      * @param result
550      * @param request
551      * @param response
552      * @return ModelAndView
553      */
554     @RequestMapping(params = "methodToCall=addControlField006")
555     public ModelAndView addControlField(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
556                                         HttpServletRequest request, HttpServletResponse response) {
557         if (!isFormInitialized) {
558             super.start(form, result, request, response);
559             isFormInitialized = true;
560         }
561         EditorForm editorForm = (EditorForm) form;
562         String docCategory = request.getParameter("docCategory");
563         String docType = request.getParameter("docType");
564         String docFormat = request.getParameter("docFormat");
565         if (docCategory == null) {
566             docCategory = editorForm.getDocCategory();
567         }
568         if (docType == null) {
569             docType = editorForm.getDocType();
570         }
571         if (docFormat == null) {
572             docFormat = editorForm.getDocFormat();
573         }
574 
575         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
576                 .getDocumentEditor(docCategory, docType, docFormat);
577 
578         editorForm = documentEditor.addORDeleteFields(editorForm, request);
579         return super.navigate(editorForm, result, request, response);
580     }
581 
582     /**
583      * This method will remove the controlField  006 based on the index position and updates the component.
584      *
585      * @param form
586      * @param result
587      * @param request
588      * @param response
589      * @return ModelAndView
590      */
591     @RequestMapping(params = "methodToCall=removeControlField006")
592     public ModelAndView removeControlField(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
593                                            HttpServletRequest request, HttpServletResponse response) {
594         if (!isFormInitialized) {
595             super.start(form, result, request, response);
596             isFormInitialized = true;
597         }
598         EditorForm editorForm = (EditorForm) form;
599         String docCategory = request.getParameter("docCategory");
600         String docType = request.getParameter("docType");
601         String docFormat = request.getParameter("docFormat");
602         if (docCategory == null) {
603             docCategory = editorForm.getDocCategory();
604         }
605         if (docType == null) {
606             docType = editorForm.getDocType();
607         }
608         if (docFormat == null) {
609             docFormat = editorForm.getDocFormat();
610         }
611 
612         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
613                 .getDocumentEditor(docCategory, docType, docFormat);
614 
615         editorForm = documentEditor.addORDeleteFields(editorForm, request);
616         return super.navigate(editorForm, result, request, response);
617     }
618 
619 
620     /**
621      * This method will add the controlField 007 record based on the selected Line index and updates the component.
622      *
623      * @param form
624      * @param result
625      * @param request
626      * @param response
627      * @return ModelAndView
628      */
629     @RequestMapping(params = "methodToCall=addControlField007")
630     public ModelAndView addControlField007(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
631                                            HttpServletRequest request, HttpServletResponse response) {
632         if (!isFormInitialized) {
633             super.start(form, result, request, response);
634             isFormInitialized = true;
635         }
636         EditorForm editorForm = (EditorForm) form;
637         String docCategory = request.getParameter("docCategory");
638         String docType = request.getParameter("docType");
639         String docFormat = request.getParameter("docFormat");
640         if (docCategory == null) {
641             docCategory = editorForm.getDocCategory();
642         }
643         if (docType == null) {
644             docType = editorForm.getDocType();
645         }
646         if (docFormat == null) {
647             docFormat = editorForm.getDocFormat();
648         }
649 
650         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
651                 .getDocumentEditor(docCategory, docType, docFormat);
652 
653         editorForm = documentEditor.addORDeleteFields(editorForm, request);
654         return super.navigate(editorForm, result, request, response);
655     }
656 
657     /**
658      * This method will remove the controlField  007 based on the index position and updates the component.
659      *
660      * @param form
661      * @param result
662      * @param request
663      * @param response
664      * @return ModelAndView
665      */
666     @RequestMapping(params = "methodToCall=removeControlField007")
667     public ModelAndView removeControlField007(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
668                                               HttpServletRequest request, HttpServletResponse response) {
669         if (!isFormInitialized) {
670             super.start(form, result, request, response);
671             isFormInitialized = true;
672         }
673         EditorForm editorForm = (EditorForm) form;
674         String docCategory = request.getParameter("docCategory");
675         String docType = request.getParameter("docType");
676         String docFormat = request.getParameter("docFormat");
677         if (docCategory == null) {
678             docCategory = editorForm.getDocCategory();
679         }
680         if (docType == null) {
681             docType = editorForm.getDocType();
682         }
683         if (docFormat == null) {
684             docFormat = editorForm.getDocFormat();
685         }
686 
687         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
688                 .getDocumentEditor(docCategory, docType, docFormat);
689 
690         editorForm = documentEditor.addORDeleteFields(editorForm, request);
691         return super.navigate(editorForm, result, request, response);
692     }
693 
694 
695     /**
696      * This method will add the datField record based on the selected Line index and updates the component.
697      *
698      * @param form
699      * @param result
700      * @param request
701      * @param response
702      * @return ModelAndView
703      */
704     @RequestMapping(params = "methodToCall=addDataField")
705     public ModelAndView addDataField(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
706                                      HttpServletRequest request, HttpServletResponse response) {
707         if (!isFormInitialized) {
708             super.start(form, result, request, response);
709             isFormInitialized = true;
710         }
711         EditorForm editorForm = (EditorForm) form;
712         String docCategory = request.getParameter("docCategory");
713         String docType = request.getParameter("docType");
714         String docFormat = request.getParameter("docFormat");
715         if (docCategory == null) {
716             docCategory = editorForm.getDocCategory();
717         }
718         if (docType == null) {
719             docType = editorForm.getDocType();
720         }
721         if (docFormat == null) {
722             docFormat = editorForm.getDocFormat();
723         }
724 
725         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
726                 .getDocumentEditor(docCategory, docType, docFormat);
727 
728         editorForm = documentEditor.addORDeleteFields(editorForm, request);
729         return super.navigate(editorForm, result, request, response);
730     }
731 
732     /**
733      * This method will remove the dataField based on the index position and updates the component.
734      *
735      * @param form
736      * @param result
737      * @param request
738      * @param response
739      * @return ModelAndView
740      */
741     @RequestMapping(params = "methodToCall=removeDataField")
742     public ModelAndView removeDataField(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
743                                         HttpServletRequest request, HttpServletResponse response) {
744         if (!isFormInitialized) {
745             super.start(form, result, request, response);
746             isFormInitialized = true;
747         }
748         EditorForm editorForm = (EditorForm) form;
749         String docCategory = request.getParameter("docCategory");
750         String docType = request.getParameter("docType");
751         String docFormat = request.getParameter("docFormat");
752         if (docCategory == null) {
753             docCategory = editorForm.getDocCategory();
754         }
755         if (docType == null) {
756             docType = editorForm.getDocType();
757         }
758         if (docFormat == null) {
759             docFormat = editorForm.getDocFormat();
760         }
761 
762         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
763                 .getDocumentEditor(docCategory, docType, docFormat);
764 
765         editorForm = documentEditor.addORDeleteFields(editorForm, request);
766         return super.navigate(editorForm, result, request, response);
767     }
768 
769 /*
770     private UifFormBase buildUifForm (HttpServletRequest httpServletRequest) {
771         UifFormBase uifFormBase = null;
772 
773         String docType = httpServletRequest.getParameter("docType");
774         String docFormat = httpServletRequest.getParameter("docFormat");
775         if ("bibliographic".equalsIgnoreCase(docType)) {
776             if ("marc".equalsIgnoreCase(docFormat)) {
777                 LOG.info("Inside EditorController createInitialForm if bibliographic marc");
778                 editor = new WorkBibMarcEditor();
779                 uifFormBase = editor.createInitialForm(httpServletRequest);
780             } else if ("dublin".equalsIgnoreCase(docFormat)) {
781                 editor = new WorkBibDublinEditor();
782                 uifFormBase = editor.createInitialForm(httpServletRequest);
783             }
784         } else if ("instance".equalsIgnoreCase(docType)) {
785             if ("oleml".equalsIgnoreCase(docFormat)) {
786                 editor = new WorkInstanceOlemlEditor();
787                 uifFormBase = editor.createInitialForm(httpServletRequest);
788             }
789         } else if ("holdings".equalsIgnoreCase(docType) || "item".equalsIgnoreCase(docType)) {
790             if ("oleml".equalsIgnoreCase(docFormat)) {
791                 editor = new WorkInstanceOlemlEditor();
792                 uifFormBase = editor.createInitialForm(httpServletRequest);
793             }
794         }
795         return uifFormBase;
796 
797     }
798 */
799 
800     /**
801      * DeleteVerify a  document in the editor.
802      *
803      * @param form
804      * @param result
805      * @param request
806      * @param response
807      * @return
808      */
809     @RequestMapping(params = "methodToCall=deleteVerify")
810     public ModelAndView deleteVerify(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
811                                      HttpServletRequest request, HttpServletResponse response) throws Exception {
812         ModelAndView modelAndView = null;
813         if (!isFormInitialized) {
814             super.start(form, result, request, response);
815             isFormInitialized = true;
816         }
817 
818         // get the document details from request and set them in the form.
819         String docCategory = request.getParameter("docCategory");
820         String docType = request.getParameter("docType");
821         String docFormat = request.getParameter("docFormat");
822         String docId = request.getParameter("docId");
823         ((EditorForm) form).setDocCategory(docCategory);
824         ((EditorForm) form).setDocType(docType);
825         ((EditorForm) form).setDocFormat(docFormat);
826         ((EditorForm) form).setDocId(docId);
827         ((EditorForm) form).setMessage("");
828 //        ((EditorForm) form).setEditable("false");
829         ((EditorForm) form).setHideFooter(false);
830 
831         DocumentEditor documentEditor = DocumentEditorFactory.getInstance().getDocumentEditor(docCategory, docType, docFormat);
832         EditorForm documentForm = documentEditor.deleteVerify((EditorForm) form);
833         LOG.info("view id-->" + documentForm.getViewId());
834         //List<String> uuidList  = new ArrayList<String>();
835         EditorForm editorForm = (EditorForm) form;
836         //uuidList.add(docId);
837 
838 /*        DocumentSelectionTree dst = new DocumentSelectionTree();
839         LOG.info("get uud list from form-->"+editorForm.getUuidList());
840         Node<DocumentTreeNode, String> rootNode = dst.add(editorForm.getUuidList());
841 
842          editorForm.getDocTree().setRootElement(rootNode);*/
843 
844         return getUIFModelAndView(editorForm, documentForm.getViewId());
845 /*
846         System.out.println("delete verify method is executed-----1");
847 
848         ((EditorForm) form).setDocCategory(docCategory);
849         ((EditorForm) form).setDocType(docType);
850         ((EditorForm) form).setDocFormat(docFormat);
851         ((EditorForm) form).setDocId(docId);
852 
853         // Identify the document editor to be used for the requested document.
854         DocumentEditor documentEditor = DocumentEditorFactory.getInstance().getDocumentEditor(docCategory, docType, docFormat);
855         System.out.println("delete verify method is executed-----2");
856         //EditorForm documentForm = null;
857         EditorForm documentForm = documentEditor.deleteVerify((EditorForm) form);
858         ((EditorForm) form).setDocumentForm(documentForm);
859 
860         try {
861             documentForm = documentEditor.deleteVerify((EditorForm) form);
862             modelAndView =getUIFModelAndView(form,documentForm.getViewId());
863             System.out.println("delete verify method is executed-----3");
864         }catch (Exception e) {
865             modelAndView =getUIFModelAndView(form,"WorkBibEditorViewPage");
866             System.out.println("delete verify method is executed-----4");
867         }
868         System.out.println("delete verify method is executed-----5");
869         return modelAndView;
870 */
871     }
872 
873     /**
874      * Delete a  document in the editor.
875      *
876      * @param form
877      * @param result
878      * @param request
879      * @param response
880      * @return
881      */
882     @RequestMapping(params = "methodToCall=delete")
883     public ModelAndView delete(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
884                                HttpServletRequest request, HttpServletResponse response) throws Exception {
885         ModelAndView modelAndView = null;
886         EditorForm editorForm = (EditorForm) form;
887         if (!isFormInitialized) {
888             super.start(form, result, request, response);
889             isFormInitialized = true;
890         }
891 
892         // get the document details from request and set them in the form.
893         String docCategory = ((EditorForm) form).getDocCategory();
894         String docType = ((EditorForm) form).getDocType();
895         String docFormat = ((EditorForm) form).getDocFormat();
896         String docId = ((EditorForm) form).getDocId();
897 
898 
899         LOG.info("docCategory-->" + docCategory);
900         LOG.info("docType-->" + docType);
901         LOG.info("docFormat-->" + docFormat);
902         LOG.info("uuid-->" + docId);
903 
904 
905 /*        ((EditorForm) form).setDocCategory(docCategory);
906         ((EditorForm) form).setDocType(docType);
907         ((EditorForm) form).setDocFormat(docFormat);
908         ((EditorForm) form).setUuid(docId);*/
909 
910         // Identify the document editor to be used for the requested document.
911         DocumentEditor documentEditor = DocumentEditorFactory.getInstance().getDocumentEditor(docCategory, docType, docFormat);
912 
913         EditorForm documentForm = documentEditor.delete((EditorForm) form);
914 
915         /*       //boolean hasLinks = delete();
916         try {
917 
918             modelAndView =getUIFModelAndView(form,"deleteConfirmation");
919         } catch (Exception e) {
920             modelAndView =getUIFModelAndView(form,"");
921             e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
922         }*/
923         // Send the input through one (request)form and get the output through another (response) form.
924 
925         // Build or update left pane data (tree structure of documents)
926         getEditorFormDataHandler().buildLeftPaneData((EditorForm) form);
927 
928         return getUIFModelAndView(editorForm, documentForm.getViewId());
929     }
930 
931     /**
932      * This method will add the ExtentOfOwnership record based on the selected Line index and updates the component.
933      *
934      * @param form
935      * @param result
936      * @param request
937      * @param response
938      * @return ModelAndView
939      */
940     @RequestMapping(params = "methodToCall=addExtentOfOwnership")
941     public ModelAndView addExtentOfOwnership(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
942                                              HttpServletRequest request, HttpServletResponse response) {
943         if (!isFormInitialized) {
944             super.start(form, result, request, response);
945             isFormInitialized = true;
946         }
947         EditorForm editorForm = (EditorForm) form;
948         String docCategory = request.getParameter("docCategory");
949         String docType = request.getParameter("docType");
950         String docFormat = request.getParameter("docFormat");
951         if (docCategory == null) {
952             docCategory = editorForm.getDocCategory();
953         }
954         if (docType == null) {
955             docType = editorForm.getDocType();
956         }
957         if (docFormat == null) {
958             docFormat = editorForm.getDocFormat();
959         }
960 
961         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
962                 .getDocumentEditor(docCategory, docType, docFormat);
963 
964         editorForm = documentEditor.addORRemoveExtentOfOwnership(editorForm, request);
965         return super.navigate(editorForm, result, request, response);
966     }
967 
968     /**
969      * This method will remove the ExtentOfOwnership based on the index position and updates the component.
970      *
971      * @param form
972      * @param result
973      * @param request
974      * @param response
975      * @return ModelAndView
976      */
977     @RequestMapping(params = "methodToCall=removeExtentOfOwnership")
978     public ModelAndView removeExtentOfOwnership(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
979                                                 HttpServletRequest request, HttpServletResponse response) {
980         if (!isFormInitialized) {
981             super.start(form, result, request, response);
982             isFormInitialized = true;
983         }
984         EditorForm editorForm = (EditorForm) form;
985         String docCategory = request.getParameter("docCategory");
986         String docType = request.getParameter("docType");
987         String docFormat = request.getParameter("docFormat");
988         if (docCategory == null) {
989             docCategory = editorForm.getDocCategory();
990         }
991         if (docType == null) {
992             docType = editorForm.getDocType();
993         }
994         if (docFormat == null) {
995             docFormat = editorForm.getDocFormat();
996         }
997 
998         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
999                 .getDocumentEditor(docCategory, docType, docFormat);
1000 
1001         editorForm = documentEditor.addORRemoveExtentOfOwnership(editorForm, request);
1002         return super.navigate(editorForm, result, request, response);
1003     }
1004 
1005     /**
1006      * This method will add the EOWHoldingNotes record based on the selected Line index and updates the component.
1007      *
1008      * @param form
1009      * @param result
1010      * @param request
1011      * @param response
1012      * @return ModelAndView
1013      */
1014     @RequestMapping(params = "methodToCall=addEOWHoldingNotes")
1015     public ModelAndView addEOWHoldingNotes(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1016                                            HttpServletRequest request, HttpServletResponse response) {
1017         if (!isFormInitialized) {
1018             super.start(form, result, request, response);
1019             isFormInitialized = true;
1020         }
1021         EditorForm editorForm = (EditorForm) form;
1022         String docCategory = request.getParameter("docCategory");
1023         String docType = request.getParameter("docType");
1024         String docFormat = request.getParameter("docFormat");
1025         if (docCategory == null) {
1026             docCategory = editorForm.getDocCategory();
1027         }
1028         if (docType == null) {
1029             docType = editorForm.getDocType();
1030         }
1031         if (docFormat == null) {
1032             docFormat = editorForm.getDocFormat();
1033         }
1034 
1035         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1036                 .getDocumentEditor(docCategory, docType, docFormat);
1037 
1038         editorForm = documentEditor.addORRemoveExtentOfOwnership(editorForm, request);
1039         return super.navigate(editorForm, result, request, response);
1040     }
1041 
1042     /**
1043      * This method will remove the EOWHoldingNotes based on the index position and updates the component.
1044      *
1045      * @param form
1046      * @param result
1047      * @param request
1048      * @param response
1049      * @return ModelAndView
1050      */
1051     @RequestMapping(params = "methodToCall=removeEOWHoldingNotes")
1052     public ModelAndView removeEOWHoldingNotes(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1053                                               HttpServletRequest request, HttpServletResponse response) {
1054         if (!isFormInitialized) {
1055             super.start(form, result, request, response);
1056             isFormInitialized = true;
1057         }
1058         EditorForm editorForm = (EditorForm) form;
1059         String docCategory = request.getParameter("docCategory");
1060         String docType = request.getParameter("docType");
1061         String docFormat = request.getParameter("docFormat");
1062         if (docCategory == null) {
1063             docCategory = editorForm.getDocCategory();
1064         }
1065         if (docType == null) {
1066             docType = editorForm.getDocType();
1067         }
1068         if (docFormat == null) {
1069             docFormat = editorForm.getDocFormat();
1070         }
1071 
1072         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1073                 .getDocumentEditor(docCategory, docType, docFormat);
1074 
1075         editorForm = documentEditor.addORRemoveExtentOfOwnership(editorForm, request);
1076         return super.navigate(editorForm, result, request, response);
1077     }
1078 
1079     /**
1080      * This method will add the AccessInformation record based on the selected Line index and updates the component.
1081      *
1082      * @param form
1083      * @param result
1084      * @param request
1085      * @param response
1086      * @return ModelAndView
1087      */
1088     @RequestMapping(params = "methodToCall=addAccessInformation")
1089     public ModelAndView addAccessInformation(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1090                                              HttpServletRequest request, HttpServletResponse response) {
1091         if (!isFormInitialized) {
1092             super.start(form, result, request, response);
1093             isFormInitialized = true;
1094         }
1095         EditorForm editorForm = (EditorForm) form;
1096         String docCategory = request.getParameter("docCategory");
1097         String docType = request.getParameter("docType");
1098         String docFormat = request.getParameter("docFormat");
1099         if (docCategory == null) {
1100             docCategory = editorForm.getDocCategory();
1101         }
1102         if (docType == null) {
1103             docType = editorForm.getDocType();
1104         }
1105         if (docFormat == null) {
1106             docFormat = editorForm.getDocFormat();
1107         }
1108 
1109         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1110                 .getDocumentEditor(docCategory, docType, docFormat);
1111 
1112         editorForm = documentEditor.addORRemoveAccessInformationAndHoldingsNotes(editorForm, request);
1113         return super.navigate(editorForm, result, request, response);
1114     }
1115 
1116     /**
1117      * This method will remove the AccessInformation based on the index position and updates the component.
1118      *
1119      * @param form
1120      * @param result
1121      * @param request
1122      * @param response
1123      * @return ModelAndView
1124      */
1125     @RequestMapping(params = "methodToCall=removeAccessInformation")
1126     public ModelAndView removeAccessInformation(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1127                                                 HttpServletRequest request, HttpServletResponse response) {
1128         if (!isFormInitialized) {
1129             super.start(form, result, request, response);
1130             isFormInitialized = true;
1131         }
1132         EditorForm editorForm = (EditorForm) form;
1133         String docCategory = request.getParameter("docCategory");
1134         String docType = request.getParameter("docType");
1135         String docFormat = request.getParameter("docFormat");
1136         if (docCategory == null) {
1137             docCategory = editorForm.getDocCategory();
1138         }
1139         if (docType == null) {
1140             docType = editorForm.getDocType();
1141         }
1142         if (docFormat == null) {
1143             docFormat = editorForm.getDocFormat();
1144         }
1145 
1146         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1147                 .getDocumentEditor(docCategory, docType, docFormat);
1148 
1149         editorForm = documentEditor.addORRemoveAccessInformationAndHoldingsNotes(editorForm, request);
1150         return super.navigate(editorForm, result, request, response);
1151     }
1152 
1153     /**
1154      * This method will add the HoldingNotes record based on the selected Line index and updates the component.
1155      *
1156      * @param form
1157      * @param result
1158      * @param request
1159      * @param response
1160      * @return ModelAndView
1161      */
1162     @RequestMapping(params = "methodToCall=addHoldingNotes")
1163     public ModelAndView addHoldingNotes(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1164                                         HttpServletRequest request, HttpServletResponse response) {
1165         if (!isFormInitialized) {
1166             super.start(form, result, request, response);
1167             isFormInitialized = true;
1168         }
1169         EditorForm editorForm = (EditorForm) form;
1170         String docCategory = request.getParameter("docCategory");
1171         String docType = request.getParameter("docType");
1172         String docFormat = request.getParameter("docFormat");
1173         if (docCategory == null) {
1174             docCategory = editorForm.getDocCategory();
1175         }
1176         if (docType == null) {
1177             docType = editorForm.getDocType();
1178         }
1179         if (docFormat == null) {
1180             docFormat = editorForm.getDocFormat();
1181         }
1182 
1183         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1184                 .getDocumentEditor(docCategory, docType, docFormat);
1185 
1186         editorForm = documentEditor.addORRemoveAccessInformationAndHoldingsNotes(editorForm, request);
1187         return super.navigate(editorForm, result, request, response);
1188     }
1189 
1190     /**
1191      * This method will remove the HoldingNotes based on the index position and updates the component.
1192      *
1193      * @param form
1194      * @param result
1195      * @param request
1196      * @param response
1197      * @return ModelAndView
1198      */
1199     @RequestMapping(params = "methodToCall=removeHoldingNotes")
1200     public ModelAndView removeHoldingNotes(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1201                                            HttpServletRequest request, HttpServletResponse response) {
1202         if (!isFormInitialized) {
1203             super.start(form, result, request, response);
1204             isFormInitialized = true;
1205         }
1206         EditorForm editorForm = (EditorForm) form;
1207         String docCategory = request.getParameter("docCategory");
1208         String docType = request.getParameter("docType");
1209         String docFormat = request.getParameter("docFormat");
1210         if (docCategory == null) {
1211             docCategory = editorForm.getDocCategory();
1212         }
1213         if (docType == null) {
1214             docType = editorForm.getDocType();
1215         }
1216         if (docFormat == null) {
1217             docFormat = editorForm.getDocFormat();
1218         }
1219 
1220         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1221                 .getDocumentEditor(docCategory, docType, docFormat);
1222 
1223         editorForm = documentEditor.addORRemoveAccessInformationAndHoldingsNotes(editorForm, request);
1224         return super.navigate(editorForm, result, request, response);
1225     }
1226 
1227     @RequestMapping(params = "methodToCall=addField")
1228     public ModelAndView addField(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1229                                  HttpServletRequest request, HttpServletResponse response) {
1230         if (!isFormInitialized) {
1231             super.start(form, result, request, response);
1232             isFormInitialized = true;
1233         }
1234         EditorForm editorForm = (EditorForm) form;
1235         String docCategory = request.getParameter("docCategory");
1236         String docType = request.getParameter("docType");
1237         String docFormat = request.getParameter("docFormat");
1238         if (docCategory == null) {
1239             docCategory = editorForm.getDocCategory();
1240         }
1241         if (docType == null) {
1242             docType = editorForm.getDocType();
1243         }
1244         if (docFormat == null) {
1245             docFormat = editorForm.getDocFormat();
1246         }
1247 
1248         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1249                 .getDocumentEditor(docCategory, docType, docFormat);
1250 
1251         editorForm = documentEditor.addORDeleteFields(editorForm, request);
1252         return super.navigate(editorForm, result, request, response);
1253     }
1254 
1255     @RequestMapping(params = "methodToCall=removeField")
1256     public ModelAndView removeField(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1257                                     HttpServletRequest request, HttpServletResponse response) {
1258         if (!isFormInitialized) {
1259             super.start(form, result, request, response);
1260             isFormInitialized = true;
1261         }
1262         EditorForm editorForm = (EditorForm) form;
1263         String docCategory = request.getParameter("docCategory");
1264         String docType = request.getParameter("docType");
1265         String docFormat = request.getParameter("docFormat");
1266         if (docCategory == null) {
1267             docCategory = editorForm.getDocCategory();
1268         }
1269         if (docType == null) {
1270             docType = editorForm.getDocType();
1271         }
1272         if (docFormat == null) {
1273             docFormat = editorForm.getDocFormat();
1274         }
1275 
1276         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1277                 .getDocumentEditor(docCategory, docType, docFormat);
1278 
1279         editorForm = documentEditor.addORDeleteFields(editorForm, request);
1280         return super.navigate(editorForm, result, request, response);
1281     }
1282 
1283 
1284     /**
1285      * Used for Test-case
1286      *
1287      * @param result
1288      * @param request
1289      * @param response
1290      * @param editorForm
1291      * @return ModelAndView
1292      */
1293     protected ModelAndView callSuper(BindingResult result, HttpServletRequest request, HttpServletResponse response,
1294                                      EditorForm editorForm) {
1295         return super.navigate(editorForm, result, request, response);
1296     }
1297 
1298     @RequestMapping(params = "methodToCall=addItemNote")
1299     public ModelAndView addItemNote(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1300                                     HttpServletRequest request, HttpServletResponse response) {
1301         if (!isFormInitialized) {
1302             super.start(form, result, request, response);
1303             isFormInitialized = true;
1304         }
1305         EditorForm editorForm = (EditorForm) form;
1306         String docCategory = request.getParameter("docCategory");
1307         String docType = request.getParameter("docType");
1308         String docFormat = request.getParameter("docFormat");
1309         if (docCategory == null) {
1310             docCategory = editorForm.getDocCategory();
1311         }
1312         if (docType == null) {
1313             docType = editorForm.getDocType();
1314         }
1315         if (docFormat == null) {
1316             docFormat = editorForm.getDocFormat();
1317         }
1318 
1319         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1320                 .getDocumentEditor(docCategory, docType, docFormat);
1321 
1322         editorForm = documentEditor.addORRemoveItemNote(editorForm, request);
1323         return super.navigate(editorForm, result, request, response);
1324     }
1325 
1326     @RequestMapping(params = "methodToCall=addDonorToItem")
1327     public ModelAndView addDonorToItem(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1328                                  HttpServletRequest request, HttpServletResponse response) {
1329         EditorForm editorForm = (EditorForm) form;
1330         WorkInstanceOlemlForm workInstanceOlemlForm = (WorkInstanceOlemlForm) editorForm.getDocumentForm();
1331         List<DonorInfo> donorInfoList = workInstanceOlemlForm.getSelectedItem().getDonorInfo();
1332         String selectedCollectionPath = form.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
1333         CollectionGroup collectionGroup = form.getPostedView().getViewIndex().getCollectionGroupByPath(
1334                 selectedCollectionPath);
1335         String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath();
1336         Object eventObject = ObjectPropertyUtils.getPropertyValue(form, addLinePath);
1337         DonorInfo donorInfo = (DonorInfo) eventObject;
1338         if (donorInfo != null && StringUtils.isNotEmpty(donorInfo.getDonorCode())) {
1339             Map map = new HashMap();
1340             map.put("donorCode", donorInfo.getDonorCode());
1341             OLEDonor oleDonor = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OLEDonor.class, map);
1342             if (oleDonor != null) {
1343                 for (DonorInfo donor : donorInfoList) {
1344                     if (donor.getDonorCode().equals(donorInfo.getDonorCode())) {
1345                         GlobalVariables.getMessageMap().putErrorForSectionId("OleDonorInformation-ListOfDonors", "error.donor.code.exist");
1346                         return getUIFModelAndView(form);
1347                     }
1348                 }
1349             }
1350             else {
1351                 GlobalVariables.getMessageMap().putErrorForSectionId("OleDonorInformation-ListOfDonors", "error.donor.code.doesnt.exist");
1352                 return getUIFModelAndView(form);
1353             }
1354         }
1355         View view = form.getPostedView();
1356         view.getViewHelperService().processCollectionAddLine(view, form, selectedCollectionPath);
1357         return getUIFModelAndView(form);
1358     }
1359 
1360     @RequestMapping(params = "methodToCall=addDonorToEInstance")
1361     public ModelAndView addDonorToEInstance(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1362                                  HttpServletRequest request, HttpServletResponse response) {
1363         EditorForm editorForm = (EditorForm) form;
1364         WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
1365         List<DonorInfo> donorInfoList = workEInstanceOlemlForm.getSelectedEHoldings().getDonorInfo();
1366         String selectedCollectionPath = form.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
1367         CollectionGroup collectionGroup = form.getPostedView().getViewIndex().getCollectionGroupByPath(
1368                 selectedCollectionPath);
1369         String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath();
1370         Object eventObject = ObjectPropertyUtils.getPropertyValue(form, addLinePath);
1371         DonorInfo donorInfo = (DonorInfo) eventObject;
1372         if (donorInfo != null && StringUtils.isNotEmpty(donorInfo.getDonorCode())) {
1373             Map map = new HashMap();
1374             map.put("donorCode", donorInfo.getDonorCode());
1375             OLEDonor oleDonor = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OLEDonor.class, map);
1376             if (oleDonor != null) {
1377                 for (DonorInfo donor : donorInfoList) {
1378                     if (donor.getDonorCode().equals(donorInfo.getDonorCode())) {
1379                         GlobalVariables.getMessageMap().putErrorForSectionId("OleEInstanceDonorInformation-ListOfDonors", "error.donor.code.exist");
1380                         return getUIFModelAndView(form);
1381                     }
1382                 }
1383             }
1384             else {
1385                 GlobalVariables.getMessageMap().putErrorForSectionId("OleEInstanceDonorInformation-ListOfDonors", "error.donor.code.doesnt.exist");
1386                 return getUIFModelAndView(form);
1387             }
1388         }
1389         View view = form.getPostedView();
1390         view.getViewHelperService().processCollectionAddLine(view, form, selectedCollectionPath);
1391         return getUIFModelAndView(form);
1392     }
1393 
1394     @RequestMapping(params = "methodToCall=removeItemNote")
1395     public ModelAndView removeItemNote(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1396                                        HttpServletRequest request, HttpServletResponse response) {
1397         if (!isFormInitialized) {
1398             super.start(form, result, request, response);
1399             isFormInitialized = true;
1400         }
1401         EditorForm editorForm = (EditorForm) form;
1402         String docCategory = request.getParameter("docCategory");
1403         String docType = request.getParameter("docType");
1404         String docFormat = request.getParameter("docFormat");
1405         if (docCategory == null) {
1406             docCategory = editorForm.getDocCategory();
1407         }
1408         if (docType == null) {
1409             docType = editorForm.getDocType();
1410         }
1411         if (docFormat == null) {
1412             docFormat = editorForm.getDocFormat();
1413         }
1414 
1415         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1416                 .getDocumentEditor(docCategory, docType, docFormat);
1417 
1418         editorForm = documentEditor.addORRemoveItemNote(editorForm, request);
1419         return super.navigate(editorForm, result, request, response);
1420     }
1421 
1422     /**
1423      * Display the linked Bib details for corresponding Holdings/Items.
1424      *
1425      * @param form
1426      * @param result
1427      * @param request
1428      * @param response
1429      * @return
1430      */
1431     @RequestMapping(params = "methodToCall=showBibs")
1432     public ModelAndView showBibs(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1433                                  HttpServletRequest request, HttpServletResponse response) {
1434         EditorForm documentForm = null;
1435         if (!isFormInitialized) {
1436             super.start(form, result, request, response);
1437             isFormInitialized = true;
1438         }
1439         // get the document details from request and set them in the form.
1440         String docCategory = request.getParameter("docCategory");
1441         String docType = request.getParameter("docType");
1442         String docFormat = request.getParameter("docFormat");
1443         String docId = request.getParameter("docId");
1444         String instanceId = request.getParameter("instanceId");
1445         String editable = request.getParameter("editable");
1446 
1447         //Verifying editable at form object
1448         if ((null == editable) || (editable.length() == 0)) {
1449             editable = ((EditorForm) form).getEditable();
1450         }
1451 
1452         //Default value for editable field if it is null
1453         if (null == editable || editable.length() == 0) {
1454             editable = "true";
1455         }
1456 
1457         ((EditorForm) form).setEditable(editable);
1458         ((EditorForm) form).setDocCategory(docCategory);
1459         ((EditorForm) form).setDocType(docType);
1460         ((EditorForm) form).setDocFormat(docFormat);
1461         ((EditorForm) form).setDocId(docId);
1462         ((EditorForm) form).setInstanceId(instanceId);
1463 
1464         // Identify the document editor to be used for the requested document.
1465         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1466                 .getDocumentEditor(docCategory, docType, docFormat);
1467 
1468         documentForm = documentEditor.showBibs((EditorForm) form);
1469         // Set the output (response) form containing document info into the current form.
1470         ((EditorForm) form).setDocumentForm(documentForm);
1471 
1472         // Return the next view to be shown to user.
1473         ModelAndView modelAndView = getUIFModelAndView(form, ((EditorForm) form).getDocumentForm().getViewId());
1474         return modelAndView;
1475     }
1476 
1477 
1478 
1479     @RequestMapping(params = "methodToCall=leaderFieldReset")
1480     public ModelAndView resetLeaderField(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1481                                          HttpServletRequest request, HttpServletResponse response) {
1482         LOG.debug("Inside the clear leader method");
1483         EditorForm editForm = (EditorForm) form;
1484         WorkBibMarcForm workBibMarcForm = (WorkBibMarcForm) editForm.getDocumentForm();
1485         workBibMarcForm.setLeaderField(new LeaderField());
1486         ((EditorForm) form).setDocumentForm(workBibMarcForm);
1487         return navigate(form, result, request, response);
1488     }
1489 
1490 
1491     @RequestMapping(params = "methodToCall=createSerialReceiving")
1492     public ModelAndView createSerialReceiving(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1493                                               HttpServletRequest request, HttpServletResponse response) {
1494         LOG.debug("Inside the createSerialReceiving method");
1495         ModelAndView modelAndView = getUIFModelAndView(form, ((EditorForm) form).getDocumentForm().getViewId());
1496         return modelAndView;
1497 
1498     }
1499 
1500 
1501     @RequestMapping(params = "methodToCall=loadControlField006")
1502     public ModelAndView loadControlField006(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1503                                             HttpServletRequest request, HttpServletResponse response) {
1504         ((EditorForm) form).setDisplayField006("true");
1505         WorkBibMarcForm workBibMarcForm = (WorkBibMarcForm) ((EditorForm) form).getDocumentForm();
1506         String controlField006Format = workBibMarcForm.getMarcControlFields().getValue();
1507         ControlField006 controlFiled006=  new ControlField006();
1508         controlFiled006.setFormat(workBibMarcForm.getMarcControlFields().getValue());
1509         workBibMarcForm.getMarcControlFields().setControlField006(controlFiled006);
1510 
1511         workBibMarcForm.getMarcControlFields().setMapVisible("false");
1512         workBibMarcForm.getMarcControlFields().setBooksVisible("false");
1513         workBibMarcForm.getMarcControlFields().setMusicVisible("false");
1514         workBibMarcForm.getMarcControlFields().setComputerFilesVisible("false");
1515         workBibMarcForm.getMarcControlFields().setContinuingResourcesVisible("false");
1516         workBibMarcForm.getMarcControlFields().setMixedMaterialVisible("false");
1517         workBibMarcForm.getMarcControlFields().setVisualMaterialsVisible("false");
1518 
1519         if (controlField006Format.equalsIgnoreCase("e") || controlField006Format.equalsIgnoreCase("f")) {
1520             workBibMarcForm.getMarcControlFields().setMapVisible("true");
1521         } else if (controlField006Format.equalsIgnoreCase("a") || controlField006Format.equalsIgnoreCase("t")) {
1522             workBibMarcForm.getMarcControlFields().setBooksVisible("true");
1523         } else if (controlField006Format.equalsIgnoreCase("c") || controlField006Format.equalsIgnoreCase("d") ||
1524                 controlField006Format.equalsIgnoreCase("i") || controlField006Format.equalsIgnoreCase("j")) {
1525             workBibMarcForm.getMarcControlFields().setMusicVisible("true");
1526         } else if (controlField006Format.equalsIgnoreCase("m")) {
1527             workBibMarcForm.getMarcControlFields().setComputerFilesVisible("true");
1528         } else if (controlField006Format.equalsIgnoreCase("s")) {
1529             workBibMarcForm.getMarcControlFields().setContinuingResourcesVisible("true");
1530         } else if (controlField006Format.equalsIgnoreCase("p")) {
1531             workBibMarcForm.getMarcControlFields().setMixedMaterialVisible("true");
1532         } else if (controlField006Format.equalsIgnoreCase("g") || controlField006Format.equalsIgnoreCase("k") ||
1533                 controlField006Format.equalsIgnoreCase("o") || controlField006Format.equalsIgnoreCase("r")) {
1534             workBibMarcForm.getMarcControlFields().setVisualMaterialsVisible("true");
1535         }
1536         ((EditorForm) form).setDocumentForm(workBibMarcForm);
1537         return navigate(form, result, request, response);
1538     }
1539 
1540     @RequestMapping(params = "methodToCall=loadControlField007")
1541     public ModelAndView loadControlField007(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1542                                             HttpServletRequest request, HttpServletResponse response) {
1543         ((EditorForm) form).setDisplayField007("true");
1544         WorkBibMarcForm workBibMarcForm = (WorkBibMarcForm) ((EditorForm) form).getDocumentForm();
1545         String controlField007Format = workBibMarcForm.getMarcControlFields().getValue007();
1546         ControlField007 controlFiled007=  new ControlField007();
1547         controlFiled007.setFormat(controlField007Format);
1548         workBibMarcForm.getMarcControlFields().setControlField007(controlFiled007);
1549 
1550         workBibMarcForm.getMarcControlFields().setMapVisible007("false");
1551         workBibMarcForm.getMarcControlFields().setElectronicResourcesVisible007("false");
1552         workBibMarcForm.getMarcControlFields().setGlobeVisible007("false");
1553         workBibMarcForm.getMarcControlFields().setTactileMaterialVisible007("false");
1554         workBibMarcForm.getMarcControlFields().setProjectGraphicVisible007("false");
1555         workBibMarcForm.getMarcControlFields().setMicroFormVisible007("false");
1556         workBibMarcForm.getMarcControlFields().setNonProjectedGraphicVisible007("false");
1557         workBibMarcForm.getMarcControlFields().setMotionPictureVisible007("false");
1558         workBibMarcForm.getMarcControlFields().setKitVisible007("false");
1559         workBibMarcForm.getMarcControlFields().setNotatedMusicVisible007("false");
1560         workBibMarcForm.getMarcControlFields().setRemoteSensingImageVisible007("false");
1561         workBibMarcForm.getMarcControlFields().setSoundRecordingVisible007("false");
1562         workBibMarcForm.getMarcControlFields().setTextVisible007("false");
1563         workBibMarcForm.getMarcControlFields().setVideoRecordingVisible007("false");
1564         workBibMarcForm.getMarcControlFields().setUnspecifiedVisible007("false");
1565 
1566         if(controlField007Format.equalsIgnoreCase("a")){
1567             workBibMarcForm.getMarcControlFields().setMapVisible007("true");
1568         }else if(controlField007Format.equalsIgnoreCase("c")){
1569             workBibMarcForm.getMarcControlFields().setElectronicResourcesVisible007("true");
1570         }
1571         else if(controlField007Format.equalsIgnoreCase("d")){
1572             workBibMarcForm.getMarcControlFields().setGlobeVisible007("true");
1573         }
1574         else if(controlField007Format.equalsIgnoreCase("f")){
1575             workBibMarcForm.getMarcControlFields().setTactileMaterialVisible007("true");
1576         }
1577         else if(controlField007Format.equalsIgnoreCase("g")){
1578             workBibMarcForm.getMarcControlFields().setProjectGraphicVisible007("true");
1579         }
1580         else if(controlField007Format.equalsIgnoreCase("h")){
1581             workBibMarcForm.getMarcControlFields().setMicroFormVisible007("true");
1582         }
1583         else if(controlField007Format.equalsIgnoreCase("k")){
1584             workBibMarcForm.getMarcControlFields().setNonProjectedGraphicVisible007("true");
1585         }
1586         else if(controlField007Format.equalsIgnoreCase("m")){
1587             workBibMarcForm.getMarcControlFields().setMotionPictureVisible007("true");
1588         }
1589         else if(controlField007Format.equalsIgnoreCase("o")){
1590             workBibMarcForm.getMarcControlFields().setKitVisible007("true");
1591         }
1592         else if(controlField007Format.equalsIgnoreCase("q")){
1593             workBibMarcForm.getMarcControlFields().setNotatedMusicVisible007("true");
1594         }
1595         else if(controlField007Format.equalsIgnoreCase("r")){
1596             workBibMarcForm.getMarcControlFields().setRemoteSensingImageVisible007("true");
1597         }
1598         else if(controlField007Format.equalsIgnoreCase("s")){
1599             workBibMarcForm.getMarcControlFields().setSoundRecordingVisible007("true");
1600         }
1601         else if(controlField007Format.equalsIgnoreCase("t")){
1602             workBibMarcForm.getMarcControlFields().setTextVisible007("true");
1603         }
1604         else if(controlField007Format.equalsIgnoreCase("v")){
1605             workBibMarcForm.getMarcControlFields().setVideoRecordingVisible007("true");
1606         }
1607         else if(controlField007Format.equalsIgnoreCase("z")){
1608             workBibMarcForm.getMarcControlFields().setUnspecifiedVisible007("true");
1609         }
1610         ((EditorForm) form).setDocumentForm(workBibMarcForm);
1611 
1612         return navigate(form, result, request, response);
1613     }
1614 
1615     @RequestMapping(params = "methodToCall=loadControlField008")
1616     public ModelAndView loadControlField008(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1617                                             HttpServletRequest request, HttpServletResponse response) {
1618         ((EditorForm) form).setDisplayField008("true");
1619         WorkBibMarcForm workBibMarcForm = (WorkBibMarcForm) ((EditorForm) form).getDocumentForm();
1620         String controlField008Format = workBibMarcForm.getMarcControlFields().getValue008();
1621         workBibMarcForm.getMarcControlFields().setControlField008(new ControlField008());
1622 
1623 
1624         workBibMarcForm.getMarcControlFields().setMapVisible008("false");
1625         workBibMarcForm.getMarcControlFields().setBooksVisible008("false");
1626         workBibMarcForm.getMarcControlFields().setMusicVisible008("false");
1627         workBibMarcForm.getMarcControlFields().setComputerFilesVisible008("false");
1628         workBibMarcForm.getMarcControlFields().setContinuingResourcesVisible008("false");
1629         workBibMarcForm.getMarcControlFields().setMixedMaterialVisible008("false");
1630         workBibMarcForm.getMarcControlFields().setVisualMaterialsVisible008("false");
1631 
1632         if (controlField008Format.equalsIgnoreCase("map")) {
1633             workBibMarcForm.getMarcControlFields().setMapVisible008("true");
1634         } else if (controlField008Format.equalsIgnoreCase("books")) {
1635             workBibMarcForm.getMarcControlFields().setBooksVisible008("true");
1636         } else if (controlField008Format.equalsIgnoreCase("music")) {
1637             workBibMarcForm.getMarcControlFields().setMusicVisible008("true");
1638         } else if (controlField008Format.equalsIgnoreCase("computer")) {
1639             workBibMarcForm.getMarcControlFields().setComputerFilesVisible008("true");
1640         } else if (controlField008Format.equalsIgnoreCase("countRes")) {
1641             workBibMarcForm.getMarcControlFields().setContinuingResourcesVisible008("true");
1642         } else if (controlField008Format.equalsIgnoreCase("mixMat")) {
1643             workBibMarcForm.getMarcControlFields().setMixedMaterialVisible008("true");
1644         } else if (controlField008Format.equalsIgnoreCase("visMat")) {
1645             workBibMarcForm.getMarcControlFields().setVisualMaterialsVisible008("true");
1646         }
1647 
1648         ((EditorForm) form).setDocumentForm(workBibMarcForm);
1649         return navigate(form, result, request, response);
1650     }
1651 
1652     @RequestMapping(params = "methodToCall=addCoverageSection")
1653     public ModelAndView addCoverageSection(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1654                                      HttpServletRequest request, HttpServletResponse response) {
1655         if (!isFormInitialized) {
1656             super.start(form, result, request, response);
1657             isFormInitialized = true;
1658         }
1659         EditorForm editorForm = (EditorForm) form;
1660         String docCategory = request.getParameter("docCategory");
1661         String docType = request.getParameter("docType");
1662         String docFormat = request.getParameter("docFormat");
1663         if (docCategory == null) {
1664             docCategory = editorForm.getDocCategory();
1665         }
1666         if (docType == null) {
1667             docType = editorForm.getDocType();
1668         }
1669         if (docFormat == null) {
1670             docFormat = editorForm.getDocFormat();
1671         }
1672 
1673         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1674                 .getDocumentEditor(docCategory, docType, docFormat);
1675 
1676         WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
1677         int index = Integer.parseInt(form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
1678         workEInstanceOlemlForm.getSelectedEHoldings().getExtentOfOwnership().get(0).getCoverages().getCoverage().add(new Coverage());
1679         return super.navigate(editorForm, result, request, response);
1680     }
1681 
1682     @RequestMapping(params = "methodToCall=removeCoverageSection")
1683     public ModelAndView removeCoverageSection(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1684                                      HttpServletRequest request, HttpServletResponse response) {
1685         if (!isFormInitialized) {
1686             super.start(form, result, request, response);
1687             isFormInitialized = true;
1688         }
1689         EditorForm editorForm = (EditorForm) form;
1690         String docCategory = request.getParameter("docCategory");
1691         String docType = request.getParameter("docType");
1692         String docFormat = request.getParameter("docFormat");
1693         if (docCategory == null) {
1694             docCategory = editorForm.getDocCategory();
1695         }
1696         if (docType == null) {
1697             docType = editorForm.getDocType();
1698         }
1699         if (docFormat == null) {
1700             docFormat = editorForm.getDocFormat();
1701         }
1702 
1703         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1704                 .getDocumentEditor(docCategory, docType, docFormat);
1705 
1706         WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
1707         int index = Integer.parseInt(form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
1708         if(workEInstanceOlemlForm.getSelectedEHoldings().getExtentOfOwnership().get(0).getCoverages().getCoverage().size()>1){
1709             workEInstanceOlemlForm.getSelectedEHoldings().getExtentOfOwnership().get(0).getCoverages().getCoverage().remove(index);
1710         }
1711         return super.navigate(editorForm, result, request, response);
1712     }
1713 
1714     @RequestMapping(params = "methodToCall=addPerpetualAccessSection")
1715     public ModelAndView addPerpetualAccessSection(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1716                                      HttpServletRequest request, HttpServletResponse response) {
1717         if (!isFormInitialized) {
1718             super.start(form, result, request, response);
1719             isFormInitialized = true;
1720         }
1721         EditorForm editorForm = (EditorForm) form;
1722         String docCategory = request.getParameter("docCategory");
1723         String docType = request.getParameter("docType");
1724         String docFormat = request.getParameter("docFormat");
1725         if (docCategory == null) {
1726             docCategory = editorForm.getDocCategory();
1727         }
1728         if (docType == null) {
1729             docType = editorForm.getDocType();
1730         }
1731         if (docFormat == null) {
1732             docFormat = editorForm.getDocFormat();
1733         }
1734 
1735         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1736                 .getDocumentEditor(docCategory, docType, docFormat);
1737 
1738         WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
1739         //int index = Integer.parseInt(workEInstanceOlemlForm.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
1740        /* String selectedPath = form.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
1741         int selectedExtentIndex = Integer.parseInt(StringUtils.substring(selectedPath,
1742                 (StringUtils.indexOf(selectedPath, "[") + 1),
1743                 StringUtils.lastIndexOf(selectedPath, "]")));*/
1744         workEInstanceOlemlForm.getSelectedEHoldings().getExtentOfOwnership().get(0).getPerpetualAccesses().getPerpetualAccess().add(new PerpetualAccess());
1745         return super.navigate(editorForm, result, request, response);
1746     }
1747 
1748     @RequestMapping(params = "methodToCall=removePerpetualAccessSection")
1749     public ModelAndView removePerpetualAccessSection(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1750                                      HttpServletRequest request, HttpServletResponse response) {
1751         if (!isFormInitialized) {
1752             super.start(form, result, request, response);
1753             isFormInitialized = true;
1754         }
1755         EditorForm editorForm = (EditorForm) form;
1756         String docCategory = request.getParameter("docCategory");
1757         String docType = request.getParameter("docType");
1758         String docFormat = request.getParameter("docFormat");
1759         if (docCategory == null) {
1760             docCategory = editorForm.getDocCategory();
1761         }
1762         if (docType == null) {
1763             docType = editorForm.getDocType();
1764         }
1765         if (docFormat == null) {
1766             docFormat = editorForm.getDocFormat();
1767         }
1768 
1769         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1770                 .getDocumentEditor(docCategory, docType, docFormat);
1771 
1772         WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
1773         int index = Integer.parseInt(form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
1774         if(workEInstanceOlemlForm.getSelectedEHoldings().getExtentOfOwnership().get(0).getPerpetualAccesses().getPerpetualAccess().size()>1){
1775             workEInstanceOlemlForm.getSelectedEHoldings().getExtentOfOwnership().get(0).getPerpetualAccesses().getPerpetualAccess().remove(index);
1776         }
1777         return super.navigate(editorForm, result, request, response);
1778     }
1779 
1780     @RequestMapping(params = "methodToCall=addOleEInstanceHoldingNotes")
1781     public ModelAndView addOleEInstanceHoldingNotes(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1782                                      HttpServletRequest request, HttpServletResponse response) {
1783         if (!isFormInitialized) {
1784             super.start(form, result, request, response);
1785             isFormInitialized = true;
1786         }
1787         EditorForm editorForm = (EditorForm) form;
1788         String docCategory = request.getParameter("docCategory");
1789         String docType = request.getParameter("docType");
1790         String docFormat = request.getParameter("docFormat");
1791         if (docCategory == null) {
1792             docCategory = editorForm.getDocCategory();
1793         }
1794         if (docType == null) {
1795             docType = editorForm.getDocType();
1796         }
1797         if (docFormat == null) {
1798             docFormat = editorForm.getDocFormat();
1799         }
1800 
1801         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1802                 .getDocumentEditor(docCategory, docType, docFormat);
1803 
1804         WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
1805         workEInstanceOlemlForm.getSelectedEHoldings().getNote().add(new Note());
1806         return super.navigate(editorForm, result, request, response);
1807     }
1808 
1809     @RequestMapping(params = "methodToCall=removeOleEInstanceHoldingNotes")
1810     public ModelAndView removeOleEInstanceHoldingNotes(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
1811                                      HttpServletRequest request, HttpServletResponse response) {
1812         if (!isFormInitialized) {
1813             super.start(form, result, request, response);
1814             isFormInitialized = true;
1815         }
1816         EditorForm editorForm = (EditorForm) form;
1817         String docCategory = request.getParameter("docCategory");
1818         String docType = request.getParameter("docType");
1819         String docFormat = request.getParameter("docFormat");
1820         if (docCategory == null) {
1821             docCategory = editorForm.getDocCategory();
1822         }
1823         if (docType == null) {
1824             docType = editorForm.getDocType();
1825         }
1826         if (docFormat == null) {
1827             docFormat = editorForm.getDocFormat();
1828         }
1829 
1830         DocumentEditor documentEditor = DocumentEditorFactory.getInstance()
1831                 .getDocumentEditor(docCategory, docType, docFormat);
1832 
1833         WorkEInstanceOlemlForm workEInstanceOlemlForm = (WorkEInstanceOlemlForm) editorForm.getDocumentForm();
1834         int index = Integer.parseInt(form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
1835         if(workEInstanceOlemlForm.getSelectedEHoldings().getNote().size()>1){
1836             workEInstanceOlemlForm.getSelectedEHoldings().getNote().remove(index);
1837         }
1838         return super.navigate(editorForm, result, request, response);
1839     }
1840 
1841     @RequestMapping(params = "methodToCall=printCallSlip")
1842     public void printCallSlip(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result, HttpServletRequest request, HttpServletResponse response) {
1843         String formKey = request.getParameter("formKey");
1844         EditorForm editorForm = (EditorForm) GlobalVariables.getUifFormManager().getSessionForm(formKey);
1845         generateCallSlip(editorForm, response);
1846     }
1847 
1848     private void generateCallSlip(EditorForm editorForm, HttpServletResponse response) {
1849         LOG.debug("Creating pdf");
1850         String title = "", author = "", callNumber = "", location = "", copyNumber = "", enumeration = "", chronology = "", barcode = "";
1851         SearchResponse searchResponse = null;
1852         SearchParams searchParams = new SearchParams();
1853         SearchField searchField1 = searchParams.buildSearchField("item", "ItemIdentifier_search", editorForm.getDocId());
1854         searchParams.getSearchConditions().add(searchParams.buildSearchCondition("OR", searchField1, "AND"));
1855         searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("bibliographic", "Title"));
1856         searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("bibliographic", "Author"));
1857         searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("item", "CallNumber"));
1858         searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("item", "LocationName"));
1859         searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("item", "CopyNumber"));
1860         searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("item", "enumeration"));
1861         searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("item", "chronology"));
1862         searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("item", "ItemBarcode"));
1863         searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("holdings", "CallNumber"));
1864         searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("holdings", "LocationName"));
1865         try {
1866             searchResponse = getDocstoreClientLocator().getDocstoreClient().search(searchParams);
1867         } catch (Exception e) {
1868             LOG.error(e, e);
1869         }
1870         if (CollectionUtils.isNotEmpty(searchResponse.getSearchResults())) {
1871             for (SearchResultField searchResultField : searchResponse.getSearchResults().get(0).getSearchResultFields()) {
1872                 if (searchResultField.getDocType().equalsIgnoreCase(DocType.BIB.getCode()) && searchResultField.getFieldName().equalsIgnoreCase("Title")) {
1873                     if (StringUtils.isBlank(title)) {
1874                         title = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1875                     }
1876                 } else if (searchResultField.getDocType().equalsIgnoreCase(DocType.BIB.getCode()) && searchResultField.getFieldName().equalsIgnoreCase("Author")) {
1877                     if (StringUtils.isBlank(author)) {
1878                         author = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1879                     }
1880                 } else if (searchResultField.getDocType().equalsIgnoreCase(DocType.ITEM.getCode()) && searchResultField.getFieldName().equalsIgnoreCase("CallNumber")) {
1881                     callNumber = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1882                 } else if (searchResultField.getDocType().equalsIgnoreCase(DocType.ITEM.getCode()) && searchResultField.getFieldName().equalsIgnoreCase("LocationName")) {
1883                     location = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1884                 } else if (searchResultField.getDocType().equalsIgnoreCase(DocType.ITEM.getCode()) && searchResultField.getFieldName().equalsIgnoreCase("CopyNumber")) {
1885                     copyNumber = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1886                 } else if (searchResultField.getDocType().equalsIgnoreCase(DocType.ITEM.getCode()) && searchResultField.getFieldName().equalsIgnoreCase("enumeration")) {
1887                     enumeration = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1888                 } else if (searchResultField.getDocType().equalsIgnoreCase(DocType.ITEM.getCode()) && searchResultField.getFieldName().equalsIgnoreCase("chronology")) {
1889                     chronology = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1890                 } else if (searchResultField.getDocType().equalsIgnoreCase(DocType.ITEM.getCode()) && searchResultField.getFieldName().equalsIgnoreCase("ItemBarcode")) {
1891                     barcode = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1892                 } else if (searchResultField.getDocType().equalsIgnoreCase(DocType.HOLDINGS.getCode()) && searchResultField.getFieldName().equalsIgnoreCase("CallNumber")) {
1893                     if (StringUtils.isBlank(callNumber)) {
1894                         callNumber = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1895                     }
1896                 } else if (searchResultField.getDocType().equalsIgnoreCase(DocType.HOLDINGS.getCode()) && searchResultField.getFieldName().equalsIgnoreCase("LocationName")) {
1897                     if (StringUtils.isBlank(location)) {
1898                         location = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
1899                     }
1900                 }
1901             }
1902         }
1903         String fileName = "Call/Paging Slip" + "_" + (editorForm.getTitle() != null ? editorForm.getTitle() : "") + "_" + new Date(System.currentTimeMillis()) + ".pdf";
1904         if (LOG.isInfoEnabled()) {
1905             LOG.info("File Created :" + title + "file name ::" + fileName + "::");
1906         }
1907         try {
1908             Document document = this.getDocument(0, 0, 5, 5);
1909             OutputStream outputStream = null;
1910             response.setContentType("application/pdf");
1911             //response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
1912             outputStream = response.getOutputStream();
1913             PdfWriter.getInstance(document, outputStream);
1914             Font boldFont = new Font(Font.TIMES_ROMAN, 15, Font.BOLD);
1915             document.open();
1916             document.newPage();
1917             PdfPTable pdfTable = new PdfPTable(3);
1918             pdfTable.setWidths(new int[]{20, 2, 30});
1919             Paragraph paraGraph = new Paragraph();
1920             paraGraph.setAlignment(Element.ALIGN_CENTER);
1921             paraGraph.add(new Chunk("Call/Paging Slip", boldFont));
1922             paraGraph.add(Chunk.NEWLINE);
1923             paraGraph.add(Chunk.NEWLINE);
1924             paraGraph.add(Chunk.NEWLINE);
1925             document.add(paraGraph);
1926 
1927             pdfTable.addCell(getPdfPCellInJustified("Title"));
1928             pdfTable.addCell(getPdfPCellInLeft(":"));
1929             pdfTable.addCell(getPdfPCellInJustified(title));
1930 
1931             pdfTable.addCell(getPdfPCellInJustified("Author"));
1932             pdfTable.addCell(getPdfPCellInLeft(":"));
1933             pdfTable.addCell(getPdfPCellInJustified(author));
1934 
1935             pdfTable.addCell(getPdfPCellInJustified("Call Number"));
1936             pdfTable.addCell(getPdfPCellInLeft(":"));
1937             pdfTable.addCell(getPdfPCellInJustified(callNumber));
1938 
1939             pdfTable.addCell(getPdfPCellInJustified("Location"));
1940             pdfTable.addCell(getPdfPCellInLeft(":"));
1941             pdfTable.addCell(getPdfPCellInJustified(location));
1942 
1943             pdfTable.addCell(getPdfPCellInJustified("Copy Number"));
1944             pdfTable.addCell(getPdfPCellInLeft(":"));
1945             pdfTable.addCell(getPdfPCellInJustified(copyNumber));
1946 
1947             pdfTable.addCell(getPdfPCellInJustified("Enumeration"));
1948             pdfTable.addCell(getPdfPCellInLeft(":"));
1949             pdfTable.addCell(getPdfPCellInJustified(enumeration));
1950 
1951             pdfTable.addCell(getPdfPCellInJustified("Chronology"));
1952             pdfTable.addCell(getPdfPCellInLeft(":"));
1953             pdfTable.addCell(getPdfPCellInJustified(chronology));
1954 
1955             pdfTable.addCell(getPdfPCellInJustified("Barcode"));
1956             pdfTable.addCell(getPdfPCellInLeft(":"));
1957             pdfTable.addCell(getPdfPCellInJustified(barcode));
1958 
1959             document.add(pdfTable);
1960             document.close();
1961             outputStream.flush();
1962             outputStream.close();
1963         } catch (Exception e) {
1964             LOG.error(e, e);
1965         }
1966     }
1967 
1968     private PdfPCell getPdfPCellInJustified(String chunk) {
1969         PdfPCell pdfPCell = new PdfPCell(new Paragraph(new Chunk(chunk)));
1970         pdfPCell.setBorder(pdfPCell.NO_BORDER);
1971         pdfPCell.setHorizontalAlignment(pdfPCell.ALIGN_JUSTIFIED);
1972         return pdfPCell;
1973     }
1974 
1975     private PdfPCell getPdfPCellInLeft(String chunk) {
1976         PdfPCell pdfPCell = new PdfPCell(new Paragraph(new Chunk(chunk)));
1977         pdfPCell.setBorder(pdfPCell.NO_BORDER);
1978         pdfPCell.setHorizontalAlignment(pdfPCell.ALIGN_LEFT);
1979         return pdfPCell;
1980     }
1981 
1982     public Document getDocument(float f1, float f2, float f3, float f4) {
1983         Document document = new Document(PageSize.A4);
1984         document.setMargins(f1, f2, f3, f4);
1985         return document;
1986     }
1987 
1988 }