001 package org.kuali.ole.license.controller; 002 003 import org.apache.commons.lang.StringUtils; 004 import org.apache.log4j.Logger; 005 import org.kuali.ole.OLEConstants; 006 import org.kuali.ole.PropertyUtil; 007 import org.kuali.ole.ingest.OleLocationXMLSchemaValidator; 008 import org.kuali.ole.ingest.form.OleLocationForm; 009 import org.kuali.ole.ingest.pojo.MatchBo; 010 import org.kuali.ole.license.bo.*; 011 import org.kuali.ole.service.OleLicenseRequestService; 012 import org.kuali.ole.service.OleLocationConverterService; 013 import org.kuali.ole.service.impl.OleLicenseRequestServiceImpl; 014 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader; 015 import org.kuali.rice.core.api.util.RiceKeyConstants; 016 import org.kuali.rice.kew.api.action.ActionRequest; 017 import org.kuali.rice.kew.api.document.node.RouteNodeInstance; 018 import org.kuali.rice.krad.bo.PersistableAttachment; 019 import org.kuali.rice.krad.bo.PersistableBusinessObject; 020 import org.kuali.rice.krad.maintenance.MaintenanceDocument; 021 import org.kuali.rice.krad.service.*; 022 import org.kuali.rice.krad.uif.UifConstants; 023 import org.kuali.rice.krad.uif.UifParameters; 024 import org.kuali.rice.krad.uif.container.CollectionGroup; 025 import org.kuali.rice.krad.uif.util.ObjectPropertyUtils; 026 import org.kuali.rice.krad.uif.view.View; 027 import org.kuali.rice.krad.util.GlobalVariables; 028 import org.kuali.rice.krad.util.KRADConstants; 029 import org.kuali.rice.krad.web.controller.DocumentControllerBase; 030 import org.kuali.rice.krad.web.controller.MaintenanceDocumentController; 031 import org.kuali.rice.krad.web.controller.UifControllerBase; 032 import org.kuali.rice.krad.web.form.DocumentFormBase; 033 import org.kuali.rice.krad.web.form.MaintenanceForm; 034 import org.kuali.rice.krad.web.form.UifFormBase; 035 import org.kuali.rice.krms.api.KrmsApiServiceLocator; 036 import org.kuali.rice.krms.api.engine.*; 037 import org.kuali.rice.krms.impl.repository.AgendaBo; 038 import org.springframework.stereotype.Controller; 039 import org.springframework.util.FileCopyUtils; 040 import org.springframework.validation.BindingResult; 041 import org.springframework.web.bind.annotation.ModelAttribute; 042 import org.springframework.web.bind.annotation.RequestMapping; 043 import org.springframework.web.bind.annotation.RequestMethod; 044 import org.springframework.web.multipart.MultipartFile; 045 import org.springframework.web.servlet.ModelAndView; 046 047 import javax.servlet.http.HttpServletRequest; 048 import javax.servlet.http.HttpServletResponse; 049 import java.io.*; 050 import java.util.*; 051 052 /** 053 * Created by IntelliJ IDEA. 054 * User: ? 055 * Date: 6/27/12 056 * Time: 6:20 PM 057 * To change this template use File | Settings | File Templates. 058 */ 059 @Controller 060 @RequestMapping(value = "/oleLicenseRequest") 061 public class OleLicenseRequestController extends MaintenanceDocumentController { 062 063 /** 064 * This method populates date of the eventlog object thereby adding to the existing list. 065 * @param uifForm 066 * @param result 067 * @param request 068 * @param response 069 * @return ModelAndView 070 */ 071 @RequestMapping(params = "methodToCall=addEventLogLine") 072 public ModelAndView addEventLogLine(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result, 073 HttpServletRequest request, HttpServletResponse response) { 074 MaintenanceForm form = (MaintenanceForm) uifForm; 075 String selectedCollectionPath = form.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH); 076 CollectionGroup collectionGroup = form.getPostedView().getViewIndex().getCollectionGroupByPath( 077 selectedCollectionPath); 078 String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath(); 079 Object eventObject = ObjectPropertyUtils.getPropertyValue(uifForm, addLinePath); 080 OleEventLogBo oleEventLogBo = (OleEventLogBo) eventObject; 081 //oleEventLogBo.setEventType("<user>"); 082 oleEventLogBo.setCurrentTimeStamp(); 083 return addLine(uifForm, result, request, response); 084 } 085 086 /** 087 * This method sets appropriate LicenseRequestStatusCode and gets the UUIDs for the agreement document from the docstore 088 * (ingesting into the docstore) and proceeds with normal routing. 089 * @param form 090 * @param result 091 * @param result 092 * @param request 093 * @param response 094 * @return ModelAndView 095 */ 096 @Override 097 @RequestMapping(params = "methodToCall=route") 098 public ModelAndView route(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result, 099 HttpServletRequest request, HttpServletResponse response) { 100 MaintenanceForm maintenanceForm = (MaintenanceForm) form; 101 MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument(); 102 OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo)document.getNewMaintainableObject().getDataObject(); 103 oleLicenseRequestBo.setAgreementId(UUID.randomUUID().toString()); 104 oleLicenseRequestBo.setRequisitionDocNumber("3014"); 105 oleLicenseRequestBo.setLicenseRequestStatusCode("LN"); 106 List<OleAgreementDocumentMetadata> agreementDocuments = oleLicenseRequestBo.getAgreementDocumentMetadataList(); 107 OleLicenseRequestService oleLicenseRequestService = new OleLicenseRequestServiceImpl(); 108 List<OleAgreementDocumentMetadata> newAgreementDocuments = new ArrayList<OleAgreementDocumentMetadata>(); 109 List<OleAgreementDocumentMetadata> checkInAgreementDocuments = new ArrayList<OleAgreementDocumentMetadata>(); 110 if(agreementDocuments.size() > 0) { 111 for(OleAgreementDocumentMetadata agreementDocument : agreementDocuments) { 112 if(isNewAgreementDocument(agreementDocument)) 113 newAgreementDocuments.add(agreementDocument); 114 else 115 checkInAgreementDocuments.add(agreementDocument); 116 } 117 } 118 List<OleAgreementDocumentMetadata> agreementDocumentMetadataList = new ArrayList<OleAgreementDocumentMetadata>(); 119 if(newAgreementDocuments.size() > 0) { 120 agreementDocumentMetadataList.addAll(oleLicenseRequestService.processIngestAgreementDocuments(newAgreementDocuments)); 121 } 122 if(checkInAgreementDocuments.size() > 0) { 123 agreementDocumentMetadataList.addAll(oleLicenseRequestService.processCheckInAgreementDocuments(checkInAgreementDocuments)); 124 } 125 oleLicenseRequestBo.setAgreementDocumentMetadataList(agreementDocumentMetadataList); 126 String licenseRequestWorkflowTypeCode = oleLicenseRequestBo.getLicenseRequestWorkflowTypeCode(); 127 if(licenseRequestWorkflowTypeCode.equalsIgnoreCase("SIGO")) { 128 oleLicenseRequestBo.setLicenseRequestStatusCode("PSIG"); 129 }else if(licenseRequestWorkflowTypeCode.equalsIgnoreCase("RVWO")) { 130 oleLicenseRequestBo.setLicenseRequestStatusCode("PREV"); 131 }else if(licenseRequestWorkflowTypeCode.equalsIgnoreCase("APPO")) { 132 oleLicenseRequestBo.setLicenseRequestStatusCode("PAPP"); 133 }else if(licenseRequestWorkflowTypeCode.equalsIgnoreCase("FAPP")){ 134 oleLicenseRequestBo.setLicenseRequestStatusCode("PSIG"); 135 } 136 137 boolean valid = false; 138 EngineResults engineResult = executeEngineResults(oleLicenseRequestBo); 139 List<ResultEvent> allResults = engineResult.getAllResults(); 140 for (Iterator<ResultEvent> resultEventIterator = allResults.iterator(); resultEventIterator.hasNext(); ) { 141 ResultEvent resultEvent = resultEventIterator.next(); 142 if (resultEvent.getType().equals("Rule Evaluated")) { 143 valid |= resultEvent.getResult(); 144 } 145 } 146 if(!valid){ 147 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.LICENSE_RULE_VAILDATIONS); 148 } 149 150 String currentUser = GlobalVariables.getUserSession().getPrincipalName(); 151 if(currentUser.equalsIgnoreCase(oleLicenseRequestBo.getAssignee()) && oleLicenseRequestBo.getEventLogs().size()<1){ 152 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.LICENSE_EVENT_LOG_CHECK ); 153 } 154 //modelAndView = super.route(form, result, request, response); 155 156 return super.route(form, result, request, response); 157 } 158 /** 159 * Performs the approve workflow action on the document 160 * 161 * @param form - document form base containing the document instance that will be approved 162 * @return ModelAndView 163 */ 164 @RequestMapping(params = "methodToCall=approve") 165 public ModelAndView approve(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result, 166 HttpServletRequest request, HttpServletResponse response) throws Exception { 167 MaintenanceForm oldMaintenanceForm = (MaintenanceForm) form; 168 MaintenanceDocument oldDocument= (MaintenanceDocument) oldMaintenanceForm.getDocument(); 169 OleLicenseRequestBo oldOleLicenseRequestBo = (OleLicenseRequestBo)oldDocument.getNewMaintainableObject().getDataObject(); 170 List<ActionRequest> oldActionRequests = oldDocument.getDocumentHeader().getWorkflowDocument().getDocumentDetail().getActionRequests(); 171 String roleName1=""; 172 for(ActionRequest actionRequest1 : oldActionRequests){ 173 if(actionRequest1.getStatus().getCode().equalsIgnoreCase("A")){ 174 roleName1 = actionRequest1.getQualifiedRoleNameLabel()!=null?actionRequest1.getQualifiedRoleNameLabel():"No Role"; 175 actionRequest1.isCurrent(); 176 } 177 } 178 boolean validRule = false; 179 EngineResults engineResult = executeEngineResults((OleLicenseRequestBo)oldDocument.getNewMaintainableObject().getDataObject()); 180 List<ResultEvent> allResults = engineResult.getAllResults(); 181 for (Iterator<ResultEvent> resultEventIterator = allResults.iterator(); resultEventIterator.hasNext(); ) { 182 ResultEvent resultEvent = resultEventIterator.next(); 183 if (resultEvent.getType().equals("Rule Evaluated")) { 184 validRule |= resultEvent.getResult(); 185 } 186 } 187 if(!validRule){ 188 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.LICENSE_RULE_VAILDATIONS); 189 } 190 String currentUser = GlobalVariables.getUserSession().getPrincipalName(); 191 boolean eventLogCheck = currentUser.equalsIgnoreCase(oldOleLicenseRequestBo.getAssignee()) && oldOleLicenseRequestBo.getEventLogs().size()<1; 192 if(eventLogCheck){ 193 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.LICENSE_EVENT_LOG_CHECK ); 194 } 195 if(!validRule || eventLogCheck){ 196 return getUIFModelAndView(form); 197 } 198 performWorkflowAction(form, UifConstants.WorkflowAction.APPROVE, true); 199 MaintenanceForm maintenanceForm = (MaintenanceForm) form; 200 MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument(); 201 List<ActionRequest> actionRequests = document.getDocumentHeader().getWorkflowDocument().getDocumentDetail().getActionRequests(); 202 OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo)document.getNewMaintainableObject().getDataObject(); 203 List<RouteNodeInstance> routeNodeInstances = document.getDocumentHeader().getWorkflowDocument().getActiveRouteNodeInstances(); 204 String nodeName = routeNodeInstances.get(0).getName(); 205 for(ActionRequest actionRequest :actionRequests){ 206 String roleName = actionRequest!=null && actionRequest.getQualifiedRoleNameLabel()!=null?actionRequest.getQualifiedRoleNameLabel():"No Role"; 207 if(roleName.equalsIgnoreCase(roleName1)){ 208 if(roleName.equalsIgnoreCase("OLE_Signatory") && actionRequest.getStatus().getCode().equalsIgnoreCase("D")){ 209 oleLicenseRequestBo.setLicenseRequestStatusCode("SIGC"); 210 getDocumentService().saveDocument(document); 211 }else if(nodeName.equalsIgnoreCase("Owner PeopleFlow") && actionRequest.getStatus().getCode().equalsIgnoreCase("D")){ 212 oleLicenseRequestBo.setLicenseRequestStatusCode("PSIG"); 213 getDocumentService().saveDocument(document); 214 }else if(roleName.equalsIgnoreCase("OLE_LicenseReviewer") && actionRequest.getStatus().getCode().equalsIgnoreCase("D")){ 215 oleLicenseRequestBo.setLicenseRequestStatusCode("RVWC"); 216 getDocumentService().saveDocument(document); 217 }else if(nodeName.equalsIgnoreCase("Owner PeopleFlow1") && actionRequest.getStatus().getCode().equalsIgnoreCase("D")){ 218 oleLicenseRequestBo.setLicenseRequestStatusCode("PAPP"); 219 getDocumentService().saveDocument(document); 220 }else if(roleName.equalsIgnoreCase("OLE_Licensing_Approver") && actionRequest.getStatus().getCode().equalsIgnoreCase("D")){ 221 oleLicenseRequestBo.setLicenseRequestStatusCode("LC"); 222 getDocumentService().saveDocument(document); 223 } 224 } 225 } 226 return returnToPrevious(form); 227 } 228 /** 229 * Performs the disapprove workflow action on the document 230 * 231 * @param form - document form base containing the document instance that will be disapproved 232 * @return ModelAndView 233 */ 234 @RequestMapping(params = "methodToCall=disapprove") 235 public ModelAndView disapprove(@ModelAttribute("KualiForm") DocumentFormBase form, BindingResult result, 236 HttpServletRequest request, HttpServletResponse response) throws Exception { 237 MaintenanceForm maintenanceForm = (MaintenanceForm) form; 238 MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument(); 239 OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo)document.getNewMaintainableObject().getDataObject(); 240 if(oleLicenseRequestBo.getEventLogs().size()<1){ 241 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(KRADConstants.GLOBAL_ERRORS, OLEConstants.OleLicenseRequest.LICENSE_DISAPPROVE_VALIDATIONS); 242 return getUIFModelAndView(form); 243 } 244 oleLicenseRequestBo.setLicenseRequestStatusCode("LNF"); 245 getDocumentService().saveDocument(document); 246 performWorkflowAction(form, UifConstants.WorkflowAction.DISAPPROVE, true); 247 248 return returnToPrevious(form); 249 } 250 251 /** 252 * Perform 253 * @param oleLicenseRequestBo 254 * @return EngineResults 255 */ 256 private EngineResults executeEngineResults(OleLicenseRequestBo oleLicenseRequestBo){ 257 Engine engine = KrmsApiServiceLocator.getEngine(); 258 EngineResults engineResult =null; 259 HashMap<String, Object> agendaValue = new HashMap<String, Object>(); 260 agendaValue.put("nm", "LICENSE_POLICY"); 261 List<AgendaBo> agendaBos = (List<AgendaBo>) KRADServiceLocator.getBusinessObjectService().findMatching(AgendaBo.class, agendaValue); 262 if(agendaBos!=null && agendaBos.size()>0){ 263 AgendaBo agendaBo = agendaBos.get(0); 264 HashMap<String, String> map = new HashMap<String, String>(); 265 map.put("AGENDA_NAME", agendaBo.getName()); 266 List<MatchBo> matchBos = (List<MatchBo>) KRADServiceLocator.getBusinessObjectService().findMatching(MatchBo.class, map); 267 268 SelectionCriteria selectionCriteria = 269 SelectionCriteria.createCriteria(null, getSelectionContext(agendaBo.getContext().getName()), getAgendaContext("LICENSE_POLICY")); 270 271 ExecutionOptions executionOptions = new ExecutionOptions(); 272 executionOptions.setFlag(ExecutionFlag.LOG_EXECUTION, true); 273 274 Facts.Builder factBuilder = Facts.Builder.create(); 275 276 String licenseType = getLicenseType(oleLicenseRequestBo.getLicenseRequestTypeId()); 277 String workflowName = getWorkFlowName(oleLicenseRequestBo.getLicenseRequestWorkflowTypeCode()) ; 278 String agreementMethod =oleLicenseRequestBo.getAgreementMethod(); 279 HashMap<String,Object> termValues = new HashMap<String, Object>() ; 280 281 termValues.put("licenseType",licenseType); 282 termValues.put("agreementMethod",agreementMethod); 283 termValues.put("workflowName",workflowName); 284 285 286 287 for (Iterator<MatchBo> matchBoIterator = matchBos.iterator(); matchBoIterator.hasNext(); ) { 288 MatchBo matchBo = matchBoIterator.next(); 289 factBuilder.addFact(matchBo.getTermName(), termValues.get((matchBo.getTermName()))); 290 } 291 292 293 engineResult = engine.execute(selectionCriteria, factBuilder.build(), executionOptions); 294 } 295 return engineResult; 296 } 297 298 /** 299 * This method returns selectionContext using contextName. 300 * @param contextName 301 * @return Map 302 */ 303 protected Map<String, String> getSelectionContext(String contextName) { 304 Map<String, String> selector = new HashMap<String, String>(); 305 selector.put(OLEConstants.NAMESPACE_CODE_SELECTOR, "OLE"); 306 selector.put(OLEConstants.NAME_SELECTOR, contextName); 307 return selector; 308 } 309 310 /** 311 * This method returns agendaContext using agendaName. 312 * @param agendaName 313 * @return Map 314 */ 315 protected Map<String, String> getAgendaContext(String agendaName) { 316 Map<String, String> selector = new HashMap<String, String>(); 317 selector.put(OLEConstants.NAME_SELECTOR, agendaName); 318 return selector; 319 } 320 321 /** 322 * This method returns LicenseType using licenseRequestTypeId. 323 * @param licenseRequestTypeId 324 * @return Map 325 */ 326 private String getLicenseType(String licenseRequestTypeId){ 327 OleLicenseRequestType oleLicenseRequestType = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(OleLicenseRequestType.class, licenseRequestTypeId); 328 return oleLicenseRequestType.getName(); 329 } 330 331 /** 332 * This method returns WorkFlowName using licenseRequestWorkflowTypeCode. 333 * @param licenseRequestWorkflowTypeCode 334 * @return 335 */ 336 private String getWorkFlowName(String licenseRequestWorkflowTypeCode){ 337 OleLicenseRequestWorkflowType oleLicenseRequestWorkflowType = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(OleLicenseRequestWorkflowType.class, licenseRequestWorkflowTypeCode); 338 return oleLicenseRequestWorkflowType.getName(); 339 } 340 341 /** 342 * This method will add the agreement document to the existing list and also stores the attachment 343 * to the specified path. 344 * 345 * @param form - MaintenanceForm 346 * @return ModelAndView 347 */ 348 @RequestMapping(params = "methodToCall=insertAgreementDocument") 349 public ModelAndView insertAgreementDocument(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result, 350 HttpServletRequest request, HttpServletResponse response) { 351 352 MaintenanceForm form = (MaintenanceForm) uifForm; 353 String selectedCollectionPath = form.getActionParamaterValue(UifParameters.SELLECTED_COLLECTION_PATH); 354 CollectionGroup collectionGroup = form.getPostedView().getViewIndex().getCollectionGroupByPath( 355 selectedCollectionPath); 356 String addLinePath = collectionGroup.getAddLineBindingInfo().getBindingPath(); 357 Object eventObject = ObjectPropertyUtils.getPropertyValue(uifForm, addLinePath); 358 OleAgreementDocumentMetadata oleAgreementDocumentMetadata = (OleAgreementDocumentMetadata)eventObject; 359 oleAgreementDocumentMetadata.setCurrentTimeStamp(); 360 String userName = GlobalVariables.getUserSession().getPrincipalName(); 361 oleAgreementDocumentMetadata.setUploadedBy(userName); 362 363 MultipartFile attachmentFile = form.getAttachmentFile(); 364 365 if (attachmentFile != null && !StringUtils.isBlank(attachmentFile.getOriginalFilename())) { 366 if (attachmentFile.getSize() == 0) { 367 GlobalVariables.getMessageMap().putError(String.format("%s.%s", 368 "document.agreementDocumentMetadataList", 369 KRADConstants.NOTE_ATTACHMENT_FILE_PROPERTY_NAME), RiceKeyConstants.ERROR_UPLOADFILE_EMPTY, 370 attachmentFile.getOriginalFilename()); 371 } else { 372 try { 373 oleAgreementDocumentMetadata.setAgreementFileName(attachmentFile.getOriginalFilename()); 374 oleAgreementDocumentMetadata.setAgreementMimeType(attachmentFile.getContentType()); 375 storeAgreementAttachment(attachmentFile); 376 } 377 catch(Exception e) { 378 LOG.error("Error while storing the Agreement Document"); 379 } 380 381 } 382 } 383 return addLine(uifForm, result, request, response); 384 } 385 386 /** 387 * This method will deletes the agreement document from the existing list 388 * 389 * @param form - MaintenanceForm 390 * @return ModelAndView 391 */ 392 @RequestMapping(params = "methodToCall=deleteAgreementDocument") 393 public ModelAndView deleteAgreementDocument(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result, 394 HttpServletRequest request, HttpServletResponse response) { 395 396 return deleteLine(uifForm, result, request, response); 397 } 398 399 /** 400 * This method will download the agreement document from the docstore if it is already ingested 401 * otherwise will download from the temprovary location. 402 * 403 * @param form - MaintenanceForm 404 * @return ModelAndView 405 */ 406 @RequestMapping(params = "methodToCall=downloadAgreement") 407 public ModelAndView downloadAgreement(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result, 408 HttpServletRequest request, 409 HttpServletResponse response) { 410 String selectedLineIndex = uifForm.getActionParamaterValue("selectedLineIndex"); 411 MaintenanceForm maintenanceForm = (MaintenanceForm) uifForm; 412 MaintenanceDocument document = (MaintenanceDocument) maintenanceForm.getDocument(); 413 OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo)document.getNewMaintainableObject().getDataObject(); 414 OleAgreementDocumentMetadata oleAgreementDocumentMetadata = oleLicenseRequestBo.getAgreementDocumentMetadataList().get(Integer.parseInt(selectedLineIndex)); 415 File file; 416 try { 417 if(oleAgreementDocumentMetadata.getAgreementUUID() == null) { 418 file = new File(OLEConstants.OleLicenseRequest.AGREEMENT_LOCATION + 419 File.separator+oleAgreementDocumentMetadata.getAgreementFileName()) ; 420 421 } 422 else { 423 OleLicenseRequestService oleLicenseRequestService = new OleLicenseRequestServiceImpl(); 424 file = oleLicenseRequestService.downloadAgreementDocumentFromDocstore(oleAgreementDocumentMetadata); 425 426 } 427 response.setContentType(oleAgreementDocumentMetadata.getAgreementMimeType()); 428 response.setContentLength((int) file.length()); 429 response.setHeader("Expires", "0"); 430 response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); 431 response.setHeader("Pragma", "public"); 432 response.setHeader("Content-Disposition", 433 "attachment; filename=\"" + oleAgreementDocumentMetadata.getAgreementFileName()+ "\""); 434 InputStream fis = new BufferedInputStream(new FileInputStream(file)); 435 FileCopyUtils.copy(fis, response.getOutputStream()); 436 437 } 438 catch (Exception e) { 439 LOG.error("Error while retrieving the attachment"); 440 } 441 442 return null; 443 } 444 445 /** 446 * This method will populate the url which will be used to view the related Requisition Document 447 * 448 * @param form - MaintenanceForm 449 * @return ModelAndView 450 */ 451 @RequestMapping(params = "methodToCall=viewRelatedDocument") 452 public ModelAndView viewRelatedDocument(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result, 453 HttpServletRequest request, 454 HttpServletResponse response) { 455 ModelAndView modelAndView = new ModelAndView(); 456 MaintenanceForm maintenanceForm = (MaintenanceForm) uifForm; 457 String oleurl = PropertyUtil.getPropertyUtil().getProperty("ole.url") ; 458 String olePortal = oleurl.substring(0,oleurl.indexOf("portal.jsp")); 459 String requisitionDocNumber = request.getParameter("requisitionDocNumber"); 460 Map criteriaMap = new HashMap(); 461 criteriaMap.put("requisitionDocNumber",requisitionDocNumber); 462 List<OleLicenseRequestBo> oleLicenseRequestBoList = (List<OleLicenseRequestBo>)KRADServiceLocator.getBusinessObjectService().findMatching(OleLicenseRequestBo.class,criteriaMap); 463 if(oleLicenseRequestBoList.size() > 0) { 464 String redirectUrl = olePortal+"kew/DocHandler.do?command=displayDocSearchView&docId="+oleLicenseRequestBoList.get(0).getRequisitionDocNumber(); 465 GlobalVariables.getUifFormManager().removeForm(uifForm); 466 modelAndView = new ModelAndView(REDIRECT_PREFIX + redirectUrl); 467 } 468 469 return modelAndView; 470 } 471 472 /** 473 * This method store the uploaded agreement document to the specified location 474 * 475 * @param form - MaintenanceForm 476 * @return ModelAndView 477 */ 478 private void storeAgreementAttachment(MultipartFile agreementFile) throws IOException { 479 String location = ""; 480 location = "/tmp/agreement_tmp"; 481 482 File dirLocation = new File(location); 483 if(!dirLocation.exists()) { 484 boolean success = dirLocation.mkdirs(); 485 if(!success) 486 LOG.error("Could not generate directory for File at: " + dirLocation.getAbsolutePath()); 487 } 488 location = location+File.separator+agreementFile.getOriginalFilename(); 489 InputStream fileContents = agreementFile.getInputStream(); 490 File fileOut = new File(location); 491 FileOutputStream streamOut = null; 492 BufferedOutputStream bufferedStreamOut = null; 493 try { 494 streamOut = new FileOutputStream(fileOut); 495 bufferedStreamOut = new BufferedOutputStream(streamOut); 496 int c; 497 while ((c = fileContents.read()) != -1) { 498 bufferedStreamOut.write(c); 499 } 500 } 501 finally { 502 bufferedStreamOut.close(); 503 streamOut.close(); 504 } 505 506 } 507 508 /** 509 * This method true if the agreement document is new. 510 * @param agreementDocumentMetadata 511 * @return boolean 512 */ 513 private boolean isNewAgreementDocument (OleAgreementDocumentMetadata agreementDocumentMetadata) { 514 return agreementDocumentMetadata.getAgreementUUID() == null; 515 } 516 }