001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.module.cab.document.web.struts; 017 018 import javax.servlet.http.HttpServletRequest; 019 import javax.servlet.http.HttpServletResponse; 020 021 import org.apache.ojb.broker.OptimisticLockException; 022 import org.apache.struts.action.ActionForm; 023 import org.apache.struts.action.ActionForward; 024 import org.apache.struts.action.ActionMapping; 025 import org.kuali.kfs.module.cab.CabKeyConstants; 026 import org.kuali.kfs.sys.KFSConstants; 027 import org.kuali.kfs.sys.context.SpringContext; 028 import org.kuali.rice.core.util.RiceConstants; 029 import org.kuali.rice.kew.dto.RouteHeaderDTO; 030 import org.kuali.rice.kew.exception.WorkflowException; 031 import org.kuali.rice.kns.util.GlobalVariables; 032 import org.kuali.rice.kns.web.struts.action.KualiAction; 033 import org.kuali.rice.kns.workflow.service.KualiWorkflowInfo; 034 import org.springmodules.orm.ojb.OjbOperationException; 035 036 public class CabActionBase extends KualiAction { 037 @Override 038 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 039 ActionForward returnForward = mapping.findForward(RiceConstants.MAPPING_BASIC); 040 041 // if found methodToCall, pass control to that method 042 try { 043 returnForward = super.execute(mapping, form, request, response); 044 } 045 catch (OjbOperationException e) { 046 // special handling for OptimisticLockExceptions 047 OjbOperationException ooe = (OjbOperationException) e; 048 049 Throwable cause = ooe.getCause(); 050 if (cause instanceof OptimisticLockException) { 051 OptimisticLockException ole = (OptimisticLockException) cause; 052 GlobalVariables.getMessageMap().putError(KFSConstants.GLOBAL_ERRORS, CabKeyConstants.DATA_EDIT_LOCK_ERROR); 053 } 054 else { 055 // if exceptions are from 'save' 056 throw e; 057 } 058 } 059 return returnForward; 060 } 061 062 063 /** 064 * This method will process the view document request by clicking on a specific document. 065 * 066 * @param mapping ActionMapping 067 * @param form ActionForm 068 * @param request HttpServletRequest 069 * @param response HttpServletResponse 070 * @return ActionForward 071 * @throws Exception 072 */ 073 public ActionForward viewDoc(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 074 String documentId = request.getParameter("documentNumber"); 075 KualiWorkflowInfo kualiWorkflowInfo = SpringContext.getBean(KualiWorkflowInfo.class); 076 try { 077 RouteHeaderDTO routeHeader = kualiWorkflowInfo.getRouteHeader(Long.valueOf(documentId)); 078 String docHandlerUrl = routeHeader.getDocumentUrl(); 079 if (docHandlerUrl.indexOf("?") == -1) { 080 docHandlerUrl += "?"; 081 } 082 else { 083 docHandlerUrl += "&"; 084 } 085 086 docHandlerUrl += "docId=" + documentId + "&" + "command=displayDocSearchView"; 087 return new ActionForward(docHandlerUrl, true); 088 } 089 catch (WorkflowException e) { 090 throw new RuntimeException("Caught WorkflowException trying to get document handler URL from Workflow", e); 091 } 092 } 093 }