View Javadoc
1   package org.kuali.ole.select.controller;
2   
3   import org.apache.commons.compress.utils.IOUtils;
4   import org.apache.commons.lang.StringUtils;
5   import org.kuali.ole.OLEConstants;
6   import org.kuali.ole.OLEPropertyConstants;
7   import org.kuali.ole.ingest.pojo.MatchBo;
8   import org.kuali.ole.select.bo.*;
9   import org.kuali.ole.select.document.OLEEResourceRecordDocument;
10  import org.kuali.ole.select.form.OLEEResourceRecordForm;
11  import org.kuali.ole.service.OleLicenseRequestService;
12  import org.kuali.ole.service.impl.OleLicenseRequestServiceImpl;
13  import org.kuali.rice.core.api.config.property.ConfigContext;
14  import org.kuali.rice.core.api.config.property.ConfigurationService;
15  import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
16  import org.kuali.rice.core.api.util.RiceKeyConstants;
17  import org.kuali.rice.kew.actionitem.ActionItem;
18  import org.kuali.rice.kew.actionlist.service.ActionListService;
19  import org.kuali.rice.kew.actionrequest.ActionRequestValue;
20  import org.kuali.rice.kew.actionrequest.service.ActionRequestService;
21  import org.kuali.rice.kew.api.KewApiConstants;
22  import org.kuali.rice.kew.api.action.ActionRequest;
23  import org.kuali.rice.kew.api.exception.WorkflowException;
24  import org.kuali.rice.kew.service.KEWServiceLocator;
25  import org.kuali.rice.krad.maintenance.MaintenanceDocument;
26  import org.kuali.rice.krad.maintenance.MaintenanceDocumentBase;
27  import org.kuali.rice.krad.service.KRADServiceLocator;
28  import org.kuali.rice.krad.uif.UifConstants;
29  import org.kuali.rice.krad.uif.UifParameters;
30  import org.kuali.rice.krad.uif.container.CollectionGroup;
31  import org.kuali.rice.krad.uif.util.ObjectPropertyUtils;
32  import org.kuali.rice.krad.util.GlobalVariables;
33  import org.kuali.rice.krad.util.KRADConstants;
34  import org.kuali.rice.krad.web.controller.MaintenanceDocumentController;
35  import org.kuali.rice.krad.web.form.DocumentFormBase;
36  import org.kuali.rice.krad.web.form.MaintenanceDocumentForm;
37  import org.kuali.rice.krad.web.form.UifFormBase;
38  import org.kuali.rice.krms.api.KrmsApiServiceLocator;
39  import org.kuali.rice.krms.api.engine.*;
40  import org.kuali.rice.krms.impl.repository.AgendaBo;
41  import org.springframework.stereotype.Controller;
42  import org.springframework.util.FileCopyUtils;
43  import org.springframework.validation.BindingResult;
44  import org.springframework.web.bind.annotation.ModelAttribute;
45  import org.springframework.web.bind.annotation.RequestMapping;
46  import org.springframework.web.multipart.MultipartFile;
47  import org.springframework.web.servlet.ModelAndView;
48  
49  import javax.servlet.http.HttpServletRequest;
50  import javax.servlet.http.HttpServletResponse;
51  import java.io.*;
52  import java.sql.Timestamp;
53  import java.util.*;
54  
55  /**
56   * OleLicenseRequestController is the controller class for License Request Maintenance Document.
57   */
58  @Controller
59  @RequestMapping(value = "/oleLicenseRequest")
60  public class OleLicenseRequestController extends MaintenanceDocumentController {
61  
62      private OleLicenseRequestService oleLicenseRequestService;
63      private final String RULE_EVALUATED = "Rule Evaluated";
64      private final String ROUTED_EXTERNAL = "Routed External";
65      protected static final String REDIRECT_PREFIX = "redirect:";
66  
67      private OleLicenseRequestService getOleLicenseRequestService() {
68          if (oleLicenseRequestService == null) {
69              oleLicenseRequestService = new OleLicenseRequestServiceImpl();
70          }
71          return oleLicenseRequestService;
72      }
73  
74      /**
75       * This method populates date of the eventlog object thereby adding to the existing list.
76       *
77       * @param uifForm
78       * @param result
79       * @param request
80       * @param response
81       * @return ModelAndView
82       */
83      @RequestMapping(params = "methodToCall=addEventLogLine")
84      public ModelAndView addEventLogLine(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
85                                          HttpServletRequest request, HttpServletResponse response) {
86          MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
87          String selectedCollectionPath = form.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
88          CollectionGroup collectionGroup = form.getPostedView().getViewIndex().getCollectionGroupByPath(
89                  selectedCollectionPath);
90          String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath();
91          Object eventObject = ObjectPropertyUtils.getPropertyValue(uifForm, addLinePath);
92          OleEventLogBo oleEventLogBo = (OleEventLogBo) eventObject;
93          oleEventLogBo.setEventType(OLEConstants.OleLicenseRequest.USER);
94          oleEventLogBo.setCurrentTimeStamp();
95          return addLine(uifForm, result, request, response);
96      }
97  
98      /**
99       * This method sets appropriate LicenseRequestStatusCode and gets the UUIDs for the agreement document from the docstore
100      * (ingesting into the docstore) and proceeds with normal routing.
101      *
102      * @param form
103      * @param result
104      * @param result
105      * @param request
106      * @param response
107      * @return ModelAndView
108      */
109     @Override
110     @RequestMapping(params = "methodToCall=route")
111     public ModelAndView route(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result,
112                               HttpServletRequest request, HttpServletResponse response) {
113 
114         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
115         MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument();
116         OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo) document.getNewMaintainableObject().getDataObject();
117         OleLicenseRequestBo oldLicenseRequestBo = (OleLicenseRequestBo) document.getOldMaintainableObject().getDataObject();
118         if (!validateFields(oleLicenseRequestBo)) {
119             return getUIFModelAndView(form);
120         }
121         if (oldLicenseRequestBo != null && oleLicenseRequestBo.getLocationId() != null &&
122                 oleLicenseRequestBo.getLocationId() != OLEConstants.OleLicenseRequest.LICENSE_INITIAL_LOCATON &&
123                 !oleLicenseRequestBo.getLocationId().equals(oldLicenseRequestBo.getLocationId())) {
124             updateEventLogForLocation(oleLicenseRequestBo, "location", null);
125         }
126         Map<String, String> licenses = getLicenseWorkFlows();
127         if (licenses.containsKey(oleLicenseRequestBo.getLicenseRequestWorkflowTypeCode())) {
128             oleLicenseRequestBo.setLicenseRequestStatusCode(licenses.get(oleLicenseRequestBo.getLicenseRequestWorkflowTypeCode()));
129             document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
130                     getLicenseRequestName(licenses.get(oleLicenseRequestBo.getLicenseRequestWorkflowTypeCode())));
131             performWorkflowAction(form, UifConstants.WorkflowAction.SAVE, true);
132             assignActionRequests(document.getDocumentHeader().getDocumentNumber(), oleLicenseRequestBo.getAssignee());
133             return closeDocument(form, result, request, response);
134         }
135         oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.LICENSE_NEEDED);
136         document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
137                 getLicenseRequestName(OLEConstants.OleLicenseRequest.LICENSE_NEEDED));
138         processAgreementDocument(oleLicenseRequestBo);
139         String licenseRequestWorkflowTypeCode = oleLicenseRequestBo.getLicenseRequestWorkflowTypeCode();
140         if (licenseRequestWorkflowTypeCode.equalsIgnoreCase(OLEConstants.OleLicenseRequest.SIGNATORY_ONLY)) {
141             oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.PENDING_SIGNATURE);
142             document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
143                     getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
144         } else if (licenseRequestWorkflowTypeCode.equalsIgnoreCase(OLEConstants.OleLicenseRequest.REVIEW_ONLY)) {
145             oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.PENDING_REVIEW);
146             document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
147                     getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
148         } else if (licenseRequestWorkflowTypeCode.equalsIgnoreCase(OLEConstants.OleLicenseRequest.APPROVE_ONLY)) {
149             oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.PENDING_APPROVAL);
150             document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
151                     getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
152         } else if (licenseRequestWorkflowTypeCode.equalsIgnoreCase(OLEConstants.OleLicenseRequest.FULL_APPROVAL)
153                 || licenseRequestWorkflowTypeCode.equalsIgnoreCase(OLEConstants.OleLicenseRequest.ADDENDUM)) {
154             oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.PENDING_REVIEW);
155             document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
156                     getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
157         }
158 
159         boolean valid = false;
160         EngineResults engineResult = executeEngineResults(oleLicenseRequestBo);
161         List<ResultEvent> allResults = engineResult.getAllResults();
162         for (Iterator<ResultEvent> resultEventIterator = allResults.iterator(); resultEventIterator.hasNext(); ) {
163             ResultEvent resultEvent = resultEventIterator.next();
164             if (resultEvent.getType().equals(RULE_EVALUATED)) {
165                 valid |= resultEvent.getResult();
166             }
167         }
168         if (!valid) {
169             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.LICENSE_RULE_VAILDATIONS);
170         }
171 
172         String currentUser = GlobalVariables.getUserSession().getPrincipalName();
173         if (currentUser.equalsIgnoreCase(oleLicenseRequestBo.getAssignee()) && oleLicenseRequestBo.getEventLogs().size() < 1) {
174             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.LICENSE_EVENT_LOG_CHECK);
175         }
176         if (oleLicenseRequestBo.getLinkedAgreement() != null & oleLicenseRequestBo.getAgreementId() == null) {
177             String agreementcontent = getOleLicenseRequestService().getAgreementContent(oleLicenseRequestBo.getLinkedAgreement());
178             if (agreementcontent != null) {
179                 oleLicenseRequestBo.setAgreementId(getOleLicenseRequestService().ingestAgreementContent(agreementcontent));
180                 oleLicenseRequestBo.setLinkedAgreement("");
181             } else {
182                 LOG.error("Error while retrieving the onixpl content");
183             }
184         }
185         //modelAndView = super.route(form, result, request, response);
186 
187         return super.route(form, result, request, response);
188     }
189 
190     /**
191      * This method validates the required field of License Request Document
192      *
193      * @param oleLicenseRequestBo
194      * @return isValid
195      */
196     private boolean validateFields(OleLicenseRequestBo oleLicenseRequestBo) {
197         boolean isFieldsValid = true;
198         LOG.debug("Inside ValidateFields method");
199         if (oleLicenseRequestBo.getLicenseRequestWorkflowTypeCode() == null ||
200                 oleLicenseRequestBo.getLicenseRequestWorkflowTypeCode().isEmpty()) {
201             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS,
202                     OLEConstants.OleLicenseRequest.ERROR_REQUIRED, OLEConstants.OleLicenseRequest.INITIATE_LR_WORKFLOW);
203             isFieldsValid &= false;
204         }
205         if (oleLicenseRequestBo.getAssignee() == null || oleLicenseRequestBo.getAssignee().isEmpty()) {
206             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS,
207                     OLEConstants.OleLicenseRequest.ERROR_REQUIRED, OLEConstants.OleLicenseRequest.DO_ASSIGNEE);
208             isFieldsValid &= false;
209         }
210         if (oleLicenseRequestBo.getLicenseRequestTypeId() == null ||
211                 oleLicenseRequestBo.getLicenseRequestTypeId().isEmpty()) {
212             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.ERROR_REQUIRED,
213                     OLEConstants.OleLicenseRequest.DO_LICENSE_REQUEST_TYPE);
214             isFieldsValid &= false;
215         }
216         if (oleLicenseRequestBo.getAgreementMethodId() == null ||
217                 oleLicenseRequestBo.getAgreementMethodId().isEmpty()) {
218             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.ERROR_REQUIRED,
219                     OLEConstants.OleLicenseRequest.DO_AGR_MTHD);
220             isFieldsValid &= false;
221         }
222         return isFieldsValid;
223     }
224 
225     /**
226      * This method is to return the License Request Status
227      */
228     private String getLicenseRequestName(String licenseRequestCode) {
229         String licenseRequestStatusName = "";
230         Map criteria = new HashMap();
231         criteria.put("code", licenseRequestCode);
232         OleLicenseRequestStatus licenseRequestStatus = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OleLicenseRequestStatus.class,
233                 criteria);
234         licenseRequestStatusName = licenseRequestStatus.getName();
235         return licenseRequestStatusName;
236     }
237 
238     /**
239      * This method assigns specified document to the selector.
240      */
241     private void assignActionRequests(String routeHeaderId, String selectedUserId) {
242         LOG.debug("Inside assignActionRequests of LicenseRequestDocument");
243         Timestamp currentTime = new Timestamp(System.currentTimeMillis());
244         ActionListService actionListSrv = KEWServiceLocator.getActionListService();
245         ActionRequestService actionReqSrv = KEWServiceLocator.getActionRequestService();
246         List<ActionRequestValue> actionReqValues = actionReqSrv.findAllPendingRequests(routeHeaderId);
247         for (ActionRequestValue actionRequest : actionReqValues) {
248             List<ActionItem> actionItems = actionRequest.getActionItems();
249             for (ActionItem actionItem : actionItems) {
250                 actionItem.setPrincipalId(selectedUserId);
251                 actionItem.setDateAssigned(currentTime);
252                 actionListSrv.saveActionItem(actionItem);
253             }
254             actionRequest.setPrincipalId(selectedUserId);
255             actionRequest.setCreateDate(currentTime);
256             //actionRequest.setAnnotation("KR-LIC Owner");
257             actionReqSrv.saveActionRequest(actionRequest);
258         }
259         LOG.debug("Leaving assignActionRequests of LicenseRequestDocument");
260     }
261 
262 
263     /**
264      * Performs the approve workflow action on the document
265      *
266      * @param form - document form base containing the document instance that will be approved
267      * @return ModelAndView
268      */
269     @RequestMapping(params = "methodToCall=approve")
270     public ModelAndView approve(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result,
271                                 HttpServletRequest request, HttpServletResponse response) throws Exception {
272         MaintenanceDocumentForm oldMaintenanceForm = (MaintenanceDocumentForm) form;
273         MaintenanceDocument oldDocument = (MaintenanceDocument) oldMaintenanceForm.getDocument();
274         OleLicenseRequestBo newLicenseRequestBo = (OleLicenseRequestBo) oldDocument.getNewMaintainableObject().getDataObject();
275         OleLicenseRequestBo oldLicenseRequestBo = (OleLicenseRequestBo) oldDocument.getOldMaintainableObject().getDataObject();
276         if (!validateFields(newLicenseRequestBo)) {
277             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.ERROR_REQUIRED);
278             return getUIFModelAndView(form);
279         }
280         if (oldLicenseRequestBo.getLocationId() != null && newLicenseRequestBo.getLocationId() != null &&
281                 !newLicenseRequestBo.getLocationId().equals(oldLicenseRequestBo.getLocationId())) {
282             updateEventLogForLocation(newLicenseRequestBo, "location", null);
283         }
284         //Ingesting the Agreement Documents
285         processAgreementDocument(newLicenseRequestBo);
286 
287         List<ActionRequest> oldActionRequests = oldDocument.getDocumentHeader().getWorkflowDocument().getDocumentDetail().getActionRequests();
288         String oldRoleName = "";
289         for (ActionRequest oldActionRequest : oldActionRequests) {
290             if (oldActionRequest.getStatus().getCode().equalsIgnoreCase("A")) {
291                 oldRoleName = oldActionRequest.getQualifiedRoleNameLabel() != null ? oldActionRequest.getQualifiedRoleNameLabel() : "No Role";
292             }
293         }
294         boolean validRule = false;
295         EngineResults engineResult = executeEngineResults((OleLicenseRequestBo) oldDocument.getNewMaintainableObject().getDataObject());
296         List<ResultEvent> allResults = engineResult.getAllResults();
297         for (Iterator<ResultEvent> resultEventIterator = allResults.iterator(); resultEventIterator.hasNext(); ) {
298             ResultEvent resultEvent = resultEventIterator.next();
299             if (resultEvent.getType().equals(RULE_EVALUATED)) {
300                 validRule |= resultEvent.getResult();
301             }
302         }
303         if (!validRule) {
304             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.LICENSE_RULE_VAILDATIONS);
305         }
306         String currentUser = GlobalVariables.getUserSession().getPrincipalName();
307         boolean eventLogCheck = currentUser.equalsIgnoreCase(newLicenseRequestBo.getAssignee()) && newLicenseRequestBo.getEventLogs().size() < 1;
308         if (eventLogCheck) {
309             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.LICENSE_EVENT_LOG_CHECK);
310         }
311         if (!validRule || eventLogCheck) {
312             return getUIFModelAndView(form);
313         }
314         //form.setAnnotation(oldRoleName);
315         performWorkflowAction(form, UifConstants.WorkflowAction.APPROVE, true);
316         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
317         MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument();
318         List<ActionRequest> actionRequests = document.getDocumentHeader().getWorkflowDocument().getDocumentDetail().getActionRequests();
319         OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo) document.getNewMaintainableObject().getDataObject();
320         for (ActionRequest actionRequest : actionRequests) {
321             String roleName = actionRequest != null && actionRequest.getQualifiedRoleNameLabel() != null ? actionRequest.getQualifiedRoleNameLabel() : "No Role";
322             if (roleName.equalsIgnoreCase(oldRoleName)) {
323                 if (roleName.equalsIgnoreCase(OLEConstants.OleLicenseRequest.SIGNATORY_ROLE_NM) && actionRequest.getStatus().getCode().equalsIgnoreCase("D")) {
324                     oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.SIGNATORY_COMPLETE);
325                     document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
326                             getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
327                     form.setAnnotation(OLEConstants.OleLicenseRequest.SIGNATORY_ROLE_NM);
328                     getDocumentService().saveDocument(document);
329                 } else if (roleName.equalsIgnoreCase(OLEConstants.OleLicenseRequest.LICENSE_MNGR_ROLE_NM) && actionRequest.getStatus().getCode().equalsIgnoreCase("D")) {
330                     if (newLicenseRequestBo.getLicenseRequestWorkflowTypeCode().equalsIgnoreCase(OLEConstants.OleLicenseRequest.SIGNATORY_ONLY)) {
331                         oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.PENDING_SIGNATURE);
332                         document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
333                                 getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
334                     } else if (newLicenseRequestBo.getLicenseRequestWorkflowTypeCode().equalsIgnoreCase(OLEConstants.OleLicenseRequest.REVIEW_ONLY)) {
335                         oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.PENDING_REVIEW);
336                         document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
337                                 getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
338                     } else if (newLicenseRequestBo.getLicenseRequestWorkflowTypeCode().equalsIgnoreCase(OLEConstants.OleLicenseRequest.APPROVE_ONLY)) {
339                         oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.PENDING_APPROVAL);
340                         document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
341                                 getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
342                     } else {
343                         oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.UNIVERSITY_COMPLETE);
344                         document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
345                                 getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
346                     }
347                     form.setAnnotation(OLEConstants.OleLicenseRequest.LICENSE_MNGR_ROLE_NM);
348                     getDocumentService().saveDocument(document);
349                 } else if (roleName.equalsIgnoreCase(OLEConstants.OleLicenseRequest.REVIEWER_ROLE_NM) && actionRequest.getStatus().getCode().equalsIgnoreCase("D")) {
350                     oleLicenseRequestBo.setLicenseRequestStatusCode(
351                             newLicenseRequestBo.getLicenseRequestWorkflowTypeCode().equalsIgnoreCase(OLEConstants.OleLicenseRequest.FULL_APPROVAL) ?
352                                     OLEConstants.OleLicenseRequest.PENDING_UNIVERSITY : OLEConstants.OleLicenseRequest.REVIEW_COMPLETE);
353                     document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
354                             getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
355                     form.setAnnotation(OLEConstants.OleLicenseRequest.REVIEWER_ROLE_NM);
356                     getDocumentService().saveDocument(document);
357                 } else if (roleName.equalsIgnoreCase(OLEConstants.OleLicenseRequest.APPROVER_ROLE_NM) && actionRequest.getStatus().getCode().equalsIgnoreCase("D")) {
358                     oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.LICENSE_COMPLETE);
359                     document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
360                             getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
361                     form.setAnnotation(OLEConstants.OleLicenseRequest.APPROVER_ROLE_NM);
362                     getDocumentService().saveDocument(document);
363                     /*OleWebServiceProvider oleWebServiceProvider = (OleWebServiceProvider) GlobalResourceLoader.getService(OLEConstants.OLE_WEB_SERVICE_PROVIDER);
364 
365                     OleRequisitionWebService oleRequisitionWebService =
366                             (OleRequisitionWebService) oleWebServiceProvider.
367                                     getService("org.kuali.ole.service.OleRequisitionWebService", "oleRequisitionWebService", getURL());
368 
369                     oleRequisitionWebService.updateRequisitionStatus(oleLicenseRequestBo.getRequisitionDocNumber(),OLEConstants.OleLicenseRequest.LICENSE_COMPLETE_RETURN );*/
370                 }
371             }
372         }
373         return returnToPrevious(form);
374     }
375 
376     /**
377      * Performs the disapprove workflow action on the document
378      *
379      * @param form - document form base containing the document instance that will be disapproved
380      * @return ModelAndView
381      */
382     @RequestMapping(params = "methodToCall=getDocument")
383     public ModelAndView getDocument(@ModelAttribute("KualiForm")  DocumentFormBase form, BindingResult result,
384                                     HttpServletRequest request, HttpServletResponse response) throws WorkflowException {
385 
386         loadDocument(form);
387         return getUIFModelAndView(form);
388 
389     } @RequestMapping(params = "methodToCall=downloadDocument")
390     public ModelAndView downloadDocument(@ModelAttribute("KualiForm")  DocumentFormBase form, BindingResult result,
391                                     HttpServletRequest request, HttpServletResponse response) throws WorkflowException {
392         loadDocument(form);
393         Map<String,String> map=new HashMap<>();
394         map.put("selectedLineIndex",request.getParameter("selectedLineIndex"));
395         form.setActionParameters(map);
396         return downloadAgreement(form,result,request,response);
397     }
398     @RequestMapping(params = "methodToCall=disapprove")
399     public ModelAndView disapprove(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result,
400                                    HttpServletRequest request, HttpServletResponse response) throws Exception {
401         LOG.debug("Inside disapprove method");
402         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
403         MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument();
404         OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo) document.getNewMaintainableObject().getDataObject();
405         if (oleLicenseRequestBo.getEventLogs().size() < 1) {
406             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.LICENSE_DISAPPROVE_VALIDATIONS);
407             return getUIFModelAndView(form);
408         }
409         oleLicenseRequestBo.setLicenseRequestStatusCode(OLEConstants.OleLicenseRequest.NEGOTIATION_FAILED);
410         document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(
411                 getLicenseRequestName(oleLicenseRequestBo.getLicenseRequestStatusCode()));
412         getDocumentService().saveDocument(document);
413         performWorkflowAction(form, UifConstants.WorkflowAction.DISAPPROVE, true);
414 
415        /* OleWebServiceProvider oleWebServiceProvider = (OleWebServiceProvider) GlobalResourceLoader.getService(OLEConstants.OLE_WEB_SERVICE_PROVIDER);
416 
417         OleRequisitionWebService oleRequisitionWebService =
418                 (OleRequisitionWebService) oleWebServiceProvider.
419                         getService("org.kuali.ole.service.OleRequisitionWebService", "oleRequisitionWebService", getURL());
420 
421         oleRequisitionWebService.updateRequisitionStatus(oleLicenseRequestBo.getRequisitionDocNumber(), OLEConstants.OleLicenseRequest.LICENSE_NEGOTIATION_FAILED);*/
422         updateEventLogForLocation(oleLicenseRequestBo, "system", "License Request Disapproved");
423         performWorkflowAction(form, UifConstants.WorkflowAction.SAVE, true);
424         return returnToPrevious(form);
425     }
426 
427     public String getURL() {
428         return ConfigContext.getCurrentContextConfig().getProperty("oleRequisitionWebService.url");
429     }
430 
431     /**
432      * Execute the Engine and return the results
433      *
434      * @param oleLicenseRequestBo
435      * @return EngineResults
436      */
437     private EngineResults executeEngineResults(OleLicenseRequestBo oleLicenseRequestBo) {
438         Engine engine = KrmsApiServiceLocator.getEngine();
439         EngineResults engineResult = null;
440         HashMap<String, Object> agendaValue = new HashMap<String, Object>();
441         agendaValue.put("nm", OLEConstants.OleLicenseRequest.LICENSE_AGENDA_NM);
442         List<AgendaBo> agendaBos = (List<AgendaBo>) KRADServiceLocator.getBusinessObjectService().findMatching(AgendaBo.class, agendaValue);
443         if (agendaBos != null && agendaBos.size() > 0) {
444             AgendaBo agendaBo = agendaBos.get(0);
445             HashMap<String, String> map = new HashMap<String, String>();
446             map.put("AGENDA_NAME", agendaBo.getName());
447             List<MatchBo> matchBos = (List<MatchBo>) KRADServiceLocator.getBusinessObjectService().findMatching(MatchBo.class, map);
448 
449             SelectionCriteria selectionCriteria =
450                     SelectionCriteria.createCriteria(null, getSelectionContext(agendaBo.getContext().getName()), getAgendaContext(OLEConstants.OleLicenseRequest.LICENSE_AGENDA_NM));
451 
452             ExecutionOptions executionOptions = new ExecutionOptions();
453             executionOptions.setFlag(ExecutionFlag.LOG_EXECUTION, true);
454 
455             Facts.Builder factBuilder = Facts.Builder.create();
456 
457             String licenseType = getLicenseType(oleLicenseRequestBo.getLicenseRequestTypeId());
458             String workflowName = getWorkFlowName(oleLicenseRequestBo.getLicenseRequestWorkflowTypeCode());
459             String agreementMethod = getAgreementMethod(oleLicenseRequestBo.getAgreementMethodId());
460             HashMap<String, Object> termValues = new HashMap<String, Object>();
461 
462             termValues.put("licenseType", licenseType);
463             termValues.put("agreementMethod", agreementMethod);
464             termValues.put("workflowName", workflowName);
465             for (Iterator<MatchBo> matchBoIterator = matchBos.iterator(); matchBoIterator.hasNext(); ) {
466                 MatchBo matchBo = matchBoIterator.next();
467                 factBuilder.addFact(matchBo.getTermName(), termValues.get((matchBo.getTermName())));
468             }
469             engineResult = engine.execute(selectionCriteria, factBuilder.build(), executionOptions);
470         }
471         return engineResult;
472     }
473 
474     private String getAgreementMethod(String agreementMethodId) {
475         OleAgreementMethod oleAgreementMethod = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(OleAgreementMethod.class, agreementMethodId);
476         return oleAgreementMethod.getAgreementMethodName();
477     }
478 
479     /**
480      * This method returns selectionContext using contextName.
481      *
482      * @param contextName
483      * @return Map
484      */
485     protected Map<String, String> getSelectionContext(String contextName) {
486         Map<String, String> selector = new HashMap<String, String>();
487         selector.put(OLEConstants.NAMESPACE_CODE_SELECTOR, "OLE");
488         selector.put(OLEConstants.NAME_SELECTOR, contextName);
489         return selector;
490     }
491 
492     /**
493      * This method returns agendaContext using agendaName.
494      *
495      * @param agendaName
496      * @return Map
497      */
498     protected Map<String, String> getAgendaContext(String agendaName) {
499         Map<String, String> selector = new HashMap<String, String>();
500         selector.put(OLEConstants.NAME_SELECTOR, agendaName);
501         return selector;
502     }
503 
504     /**
505      * This method returns LicenseType using licenseRequestTypeId.
506      *
507      * @param licenseRequestTypeId
508      * @return Map
509      */
510     private String getLicenseType(String licenseRequestTypeId) {
511         OleLicenseRequestType oleLicenseRequestType = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(OleLicenseRequestType.class, licenseRequestTypeId);
512         return oleLicenseRequestType.getName();
513     }
514 
515     /**
516      * This method returns WorkFlowName using licenseRequestWorkflowTypeCode.
517      *
518      * @param licenseRequestWorkflowTypeCode
519      * @return
520      */
521     private String getWorkFlowName(String licenseRequestWorkflowTypeCode) {
522         OleLicenseRequestWorkflowType oleLicenseRequestWorkflowType = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(OleLicenseRequestWorkflowType.class, licenseRequestWorkflowTypeCode);
523         return oleLicenseRequestWorkflowType.getName();
524     }
525 
526     /**
527      * This method will add the agreement document to the existing list and also stores the attachment
528      * to the specified path.
529      *
530      * @param uifForm - MaintenanceDocumentForm
531      * @return ModelAndView
532      */
533     @RequestMapping(params = "methodToCall=insertAgreementDocument")
534     public ModelAndView insertAgreementDocument(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
535                                                 HttpServletRequest request, HttpServletResponse response) {
536 
537         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
538         MultipartFile attachmentFile = form.getAttachmentFile();
539         if (attachmentFile.getOriginalFilename() != null && !attachmentFile.getOriginalFilename().isEmpty()) {
540             String selectedCollectionPath = form.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH);
541             CollectionGroup collectionGroup = form.getPostedView().getViewIndex().getCollectionGroupByPath(
542                     selectedCollectionPath);
543             String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath();
544             Object eventObject = ObjectPropertyUtils.getPropertyValue(uifForm, addLinePath);
545             OleAgreementDocumentMetadata oleAgreementDocumentMetadata = (OleAgreementDocumentMetadata) eventObject;
546             oleAgreementDocumentMetadata.setCurrentTimeStamp();
547             String userName = GlobalVariables.getUserSession().getPrincipalName();
548             oleAgreementDocumentMetadata.setUploadedBy(userName);
549 
550             if (attachmentFile != null && !StringUtils.isBlank(attachmentFile.getOriginalFilename())) {
551                 if (attachmentFile.getSize() == 0) {
552                     GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS,
553                             RiceKeyConstants.ERROR_UPLOADFILE_EMPTY, attachmentFile.getOriginalFilename());
554                     return getUIFModelAndView(form);
555                 } else {
556                     try {
557                         oleAgreementDocumentMetadata.setAgreementFileName(attachmentFile.getOriginalFilename());
558                         oleAgreementDocumentMetadata.setAgreementMimeType(attachmentFile.getContentType());
559                         storeAgreementAttachment(attachmentFile);
560                         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
561                         OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo) document.getNewMaintainableObject().getDataObject();
562                         updateEventLogForLocation(oleLicenseRequestBo, "file", "Agreement Document uploaded - " + attachmentFile.getOriginalFilename());
563                     } catch (Exception e) {
564                         LOG.error("Exception while storing the Agreement Document"+e);
565                     }
566                 }
567             }
568         } else {
569             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_MESSAGES, OLEConstants.OleLicenseRequest.ERROR_FILE_NOT_FOUND);
570             return getUIFModelAndView(form);
571         }
572 
573         return addLine(form, result, request, response);
574     }
575 
576     /**
577      * This method will deletes the agreement document from the existing list
578      *
579      * @param uifForm - MaintenanceDocumentForm
580      * @return ModelAndView
581      */
582     @RequestMapping(params = "methodToCall=deleteAgreementDocument")
583     public ModelAndView deleteAgreementDocument(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
584                                                 HttpServletRequest request, HttpServletResponse response) {
585         MaintenanceDocumentForm form = (MaintenanceDocumentForm) uifForm;
586         MultipartFile attachmentFile = form.getAttachmentFile();
587         String selectedLineIndex = uifForm.getActionParamaterValue("selectedLineIndex");
588         MaintenanceDocument document = (MaintenanceDocument) form.getDocument();
589         OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo) document.getNewMaintainableObject().getDataObject();
590         OleAgreementDocumentMetadata oleAgreementDocumentMetadata = oleLicenseRequestBo.getAgreementDocumentMetadataList().get(Integer.parseInt(selectedLineIndex));
591         boolean isSuccesfull = false;
592         try {
593             if (oleAgreementDocumentMetadata.getAgreementUUID() != null) {
594                 isSuccesfull = getOleLicenseRequestService().deleteAgreementDocument(oleAgreementDocumentMetadata);
595             } else {
596                 isSuccesfull = deleteAgreementAttachment(attachmentFile);
597             }
598             if (isSuccesfull) {
599                 updateEventLogForLocation(oleLicenseRequestBo, "file",
600                         "Agreement Document deleted - " + oleAgreementDocumentMetadata.getAgreementFileName());
601                 performWorkflowAction(form, UifConstants.WorkflowAction.SAVE, true);
602             }
603         } catch (Exception e) {
604             LOG.error("Exception while deleting the Agreement Document"+e);
605         }
606         return deleteLine(uifForm, result, request, response);
607     }
608 
609     /**
610      * This method will download the agreement document from the docstore if it is already ingested
611      * otherwise will download from the temprovary location.
612      *
613      * @param uifForm - MaintenanceDocumentForm
614      * @return ModelAndView
615      */
616     @RequestMapping(params = "methodToCall=downloadAgreement")
617     public ModelAndView downloadAgreement(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
618                                           HttpServletRequest request,
619                                           HttpServletResponse response) {
620         String selectedLineIndex = uifForm.getActionParamaterValue("selectedLineIndex");
621         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) uifForm;
622         MaintenanceDocumentBase document = (MaintenanceDocumentBase) maintenanceForm.getDocument();
623         OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo) document.getNewMaintainableObject().getDataObject();
624 
625         OleAgreementDocumentMetadata oleAgreementDocumentMetadata = oleLicenseRequestBo.getAgreementDocumentMetadataList().get(Integer.parseInt(selectedLineIndex));
626         File file;
627         try {
628             if (oleAgreementDocumentMetadata.getAgreementUUID() == null) {
629                 file = new File(getKualiConfigurationService().getPropertyValueAsString(
630                         KRADConstants.ATTACHMENTS_PENDING_DIRECTORY_KEY) + OLEConstants.OleLicenseRequest.AGREEMENT_TMP_LOCATION +
631                         File.separator + oleAgreementDocumentMetadata.getAgreementFileName());
632                 LOG.info("Uploaded file location : " + file.getAbsolutePath());
633             } else {
634                 file = getOleLicenseRequestService().downloadAgreementDocumentFromDocstore(oleAgreementDocumentMetadata);
635                 LOG.info("Uploaded file location : " + file.getAbsolutePath());
636 
637             }
638             response.setContentType(oleAgreementDocumentMetadata.getAgreementMimeType());
639             response.setContentLength((int) file.length());
640             response.setHeader("Expires", "0");
641             response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
642             response.setHeader("Pragma", "public");
643             response.setHeader("Content-Disposition",
644                     "attachment; filename=\"" + oleAgreementDocumentMetadata.getAgreementFileName() + "\"");
645             InputStream fis = new BufferedInputStream(new FileInputStream(file));
646             FileCopyUtils.copy(fis, response.getOutputStream());
647 
648         } catch (Exception e) {
649             LOG.error("Exception while retrieving the attachment"+e);
650         } finally {
651             updateEventLogForLocation(oleLicenseRequestBo, "agreement document", "Agreement Document Downloaded");
652             performWorkflowAction(maintenanceForm, UifConstants.WorkflowAction.SAVE, true);
653         }
654 
655         return null;
656     }
657 
658     /**
659      * This method will populate the url which will be used to view the related Requisition Document
660      *
661      * @param uifForm - MaintenanceDocumentForm
662      * @return ModelAndView
663      */
664     @RequestMapping(params = "methodToCall=viewRelatedDocument")
665     public ModelAndView viewRelatedDocument(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
666                                             HttpServletRequest request,
667                                             HttpServletResponse response) {
668         ModelAndView modelAndView = new ModelAndView();
669         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) uifForm;
670         String oleurl = ConfigContext.getCurrentContextConfig().getProperty("ole.url");
671         String olePortal = oleurl.substring(0, oleurl.indexOf("portal.jsp"));
672         String requisitionDocNumber = request.getParameter(OLEConstants.OleLicenseRequest.REQUISITION_DOC_NUM);
673         String redirectUrl = olePortal + KewApiConstants.Namespaces.MODULE_NAME + "/" + KewApiConstants.DOC_HANDLER_REDIRECT_PAGE + "?" + KewApiConstants.COMMAND_PARAMETER + "=" + KewApiConstants.DOCSEARCH_COMMAND + "&" + KewApiConstants.DOCUMENT_ID_PARAMETER + "=" + requisitionDocNumber;
674         //GlobalVariables.getUifFormManager().removeForm(uifForm);
675         modelAndView = new ModelAndView(REDIRECT_PREFIX + redirectUrl);
676 
677         return modelAndView;
678     }
679 
680     /**
681      * This method store the uploaded agreement document to the specified location
682      *
683      * @return ModelAndView
684      */
685     private void storeAgreementAttachment(MultipartFile agreementFile) throws IOException {
686         String location = "";
687         location = getKualiConfigurationService().getPropertyValueAsString(
688                 KRADConstants.ATTACHMENTS_PENDING_DIRECTORY_KEY) + OLEConstants.OleLicenseRequest.AGREEMENT_TMP_LOCATION;
689         LOG.info("Agreement Attachment LOG :" + location);
690         File dirLocation = new File(location);
691         if (!dirLocation.exists()) {
692             boolean success = dirLocation.mkdirs();
693             if (!success) {
694                 LOG.error("Could not generate directory for File at: " + dirLocation.getAbsolutePath());
695             }
696         }
697         location = location + File.separator + agreementFile.getOriginalFilename();
698         InputStream fileContents = agreementFile.getInputStream();
699         File fileOut = new File(location);
700         FileOutputStream streamOut = null;
701         BufferedOutputStream bufferedStreamOut = null;
702         try {
703             streamOut = new FileOutputStream(fileOut);
704             bufferedStreamOut = new BufferedOutputStream(streamOut);
705             int c;
706             while ((c = fileContents.read()) != -1) {
707                 bufferedStreamOut.write(c);
708             }
709         } finally {
710             bufferedStreamOut.close();
711             streamOut.close();
712         }
713 
714     }
715 
716     /**
717      * This method true if the agreement document is new.
718      *
719      * @param agreementDocumentMetadata
720      * @return boolean
721      */
722     private boolean isNewAgreementDocument(OleAgreementDocumentMetadata agreementDocumentMetadata) {
723         return agreementDocumentMetadata.getAgreementUUID() == null;
724     }
725 
726     /**
727      * Saves the document instance contained on the form
728      *
729      * @param form - document form base containing the document instance that will be saved
730      * @return ModelAndView
731      */
732     @RequestMapping(params = "methodToCall=save")
733     public ModelAndView save(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result,
734                              HttpServletRequest request, HttpServletResponse response) throws Exception {
735         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) form;
736         MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument();
737         OleLicenseRequestBo newLicenseRequestBo = (OleLicenseRequestBo) document.getNewMaintainableObject().getDataObject();
738         OleLicenseRequestBo oldLicenseRequestBo = (OleLicenseRequestBo) document.getOldMaintainableObject().getDataObject();
739         if (oldLicenseRequestBo != null && newLicenseRequestBo.getLocationId() != null &&
740                 newLicenseRequestBo.getLocationId().equals(OLEConstants.OleLicenseRequest.LICENSE_INITIAL_LOCATON) &&
741                 !newLicenseRequestBo.getLocationId().equals(oldLicenseRequestBo.getLocationId())) {
742             updateEventLogForLocation(newLicenseRequestBo, "location", null);
743         }
744         processAgreementDocument(newLicenseRequestBo);
745         Map<String, String> licenses = getLicenseWorkFlows();
746         if (licenses.containsKey(newLicenseRequestBo.getLicenseRequestWorkflowTypeCode())) {
747             document.getDocumentHeader().getWorkflowDocument().setApplicationDocumentStatus(getLicenseRequestName(licenses.get(newLicenseRequestBo.getLicenseRequestWorkflowTypeCode())));
748             if (newLicenseRequestBo.getLicenseRequestWorkflowTypeCode().equals(OLEConstants.OleLicenseRequest.LICENSE_RECEIVED)) {
749                 updateEventLogForLocation(newLicenseRequestBo, "license received", "status change");
750             }
751             newLicenseRequestBo.setLicenseRequestStatusCode(licenses.get(newLicenseRequestBo.getLicenseRequestWorkflowTypeCode()));
752             performWorkflowAction(form, UifConstants.WorkflowAction.SAVE, true);
753         }
754         return super.save(form, result, request, response);
755     }
756 
757    /* */
758 
759     /**
760      * This method is used to view the agreement linked to the license request
761      *
762      * @return
763      *//*
764     @RequestMapping(params = "methodToCall=viewAgreement")
765     public ModelAndView viewAgreement(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
766                                       HttpServletRequest request,
767                                       HttpServletResponse response) {
768         ModelAndView modelAndView = new ModelAndView();
769         MaintenanceDocumentForm maintenanceForm = (MaintenanceDocumentForm) uifForm;
770         MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument();
771         OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo)document.getNewMaintainableObject().getDataObject();
772         String url = PropertyUtil.getPropertyUtil().getProperty("docstore.url") ;
773         if(oleLicenseRequestBo != null) {
774             String redirectUrl = url+"?docAction=checkOut&uuid="+oleLicenseRequestBo.getAgreementId();
775             //GlobalVariables.getUifFormManager().removeForm(uifForm);
776             modelAndView = new ModelAndView(REDIRECT_PREFIX + redirectUrl);
777         }
778         else {
779             GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.AGREEMENT_ERROR);
780         }
781         return modelAndView;
782     }
783 */
784     private ConfigurationService getKualiConfigurationService() {
785         return GlobalResourceLoader.getService("kualiConfigurationService");
786     }
787 
788     /**
789      * This method deletes the attached file
790      *
791      * @param agreementFile
792      * @return boolean
793      * @throws java.io.IOException
794      */
795     private boolean deleteAgreementAttachment(MultipartFile agreementFile) throws IOException {
796         LOG.debug("Inside deleteAgreementAttachment method");
797         String location = "";
798         location = getKualiConfigurationService().getPropertyValueAsString(
799                 KRADConstants.ATTACHMENTS_PENDING_DIRECTORY_KEY) + OLEConstants.OleLicenseRequest.AGREEMENT_TMP_LOCATION + File.separator + agreementFile.getOriginalFilename();
800         File attachmentFile = new File(location);
801         return attachmentFile.delete();
802     }
803 
804     /**
805      * This method update the eventlog in the License Request according to the event type nad description
806      *
807      * @param oleLicenseRequestBo
808      * @param eventType
809      * @param description
810      */
811     private void updateEventLogForLocation(OleLicenseRequestBo oleLicenseRequestBo, String eventType, String description) {
812         LOG.debug("Inside updateEventLogForLocation method");
813         OleEventLogBo oleEventLogBo = new OleEventLogBo();
814         oleEventLogBo.setCurrentTimeStamp();
815         oleEventLogBo.setCreatedBy(GlobalVariables.getUserSession().getPrincipalName());
816         if (eventType.equalsIgnoreCase("location")) {
817             Map criteria = new HashMap();
818             criteria.put("id", oleLicenseRequestBo.getLocationId());
819             OleLicenseRequestLocation location = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(OleLicenseRequestLocation.class,
820                     criteria);
821             oleEventLogBo.setEventDescription(ROUTED_EXTERNAL);
822             oleEventLogBo.setEventType("location : " + location.getDescription());
823         } else {
824             oleEventLogBo.setEventDescription(description);
825             oleEventLogBo.setEventType(eventType);
826         }
827 
828         oleLicenseRequestBo.getEventLogs().add(oleEventLogBo);
829     }
830 
831     /**
832      * This method ingest the new agreement document or update the existing agreement document metadata in the docstore
833      *
834      * @param oleLicenseRequestBo
835      */
836     private void processAgreementDocument(OleLicenseRequestBo oleLicenseRequestBo) {
837         LOG.debug("Inside processAgreementDocument method");
838         List<OleAgreementDocumentMetadata> agreementDocuments = oleLicenseRequestBo.getAgreementDocumentMetadataList();
839         List<OleAgreementDocumentMetadata> newAgreementDocuments = new ArrayList<OleAgreementDocumentMetadata>();
840         List<OleAgreementDocumentMetadata> checkInAgreementDocuments = new ArrayList<OleAgreementDocumentMetadata>();
841         if (agreementDocuments.size() > 0) {
842             for (OleAgreementDocumentMetadata agreementDocument : agreementDocuments) {
843                 if (isNewAgreementDocument(agreementDocument)) {
844                     newAgreementDocuments.add(agreementDocument);
845                 } else {
846                     checkInAgreementDocuments.add(agreementDocument);
847                 }
848             }
849         }
850         List<OleAgreementDocumentMetadata> agreementDocumentMetadataList = new ArrayList<OleAgreementDocumentMetadata>();
851         if (newAgreementDocuments.size() > 0) {
852             agreementDocumentMetadataList.addAll(getOleLicenseRequestService().processIngestAgreementDocuments(newAgreementDocuments));
853         }
854         if (checkInAgreementDocuments.size() > 0) {
855             agreementDocumentMetadataList.addAll(getOleLicenseRequestService().processCheckInAgreementDocuments(checkInAgreementDocuments));
856         }
857         oleLicenseRequestBo.setAgreementDocumentMetadataList(agreementDocumentMetadataList);
858     }
859 
860     /**
861      * This method returns a map which will have the Initail level Workfolw codes
862      *
863      * @return
864      */
865     private Map<String, String> getLicenseWorkFlows() {
866         LOG.debug("Inside getLicenseWorkFlows method");
867         Map<String, String> licenseWorkFlows = new HashMap<String, String>();
868         licenseWorkFlows.put(OLEConstants.OleLicenseRequest.LICENSE_IN_NEGO, OLEConstants.OleLicenseRequest.LICENSE_IN_NEGO_VALUE);
869         licenseWorkFlows.put(OLEConstants.OleLicenseRequest.LICENSE_IN_PROCESS, OLEConstants.OleLicenseRequest.LICENSE_IN_PROCESS_VALUE);
870         licenseWorkFlows.put(OLEConstants.OleLicenseRequest.LICENSE_INITIAL_WORKFLOW, OLEConstants.OleLicenseRequest.LICENSE_NEEDED);
871         licenseWorkFlows.put(OLEConstants.OleLicenseRequest.LICENSE_RECEIVED,
872                 OLEConstants.OleLicenseRequest.LICENSE_COMPLETE_RETURN);
873         licenseWorkFlows.put(OLEConstants.OleLicenseRequest.LICENSE_REQUESTED, OLEConstants.OleLicenseRequest.LICENSE_REQUESTED_VALUE);
874         return licenseWorkFlows;
875     }
876 
877     @RequestMapping(params = "methodToCall=" + "closeDocument")
878     public ModelAndView closeDocument(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
879                                       HttpServletRequest request, HttpServletResponse response) {
880 
881         String baseUrl = ConfigContext.getCurrentContextConfig().getProperty(OLEPropertyConstants.OLE_URL_BASE);
882         String url = baseUrl + "/portal.do";
883         Properties props = new Properties();
884         props.put(UifParameters.METHOD_TO_CALL, UifConstants.MethodToCallNames.REFRESH);
885         if (StringUtils.isNotBlank(form.getReturnFormKey())) {
886             props.put(UifParameters.FORM_KEY, form.getReturnFormKey());
887         }
888         return performRedirect(form, url, props);
889     }
890 
891 
892 }