@SuppressWarnings("unchecked") public Map<String, Collection<SoftError>> getSoftErrors() { UserSession session = GlobalVariables.getUserSession(); Object o = session.retrieveObject(KeyConstants.SOFT_ERRORS_KEY); Map<String, Collection<SoftError>> softErrors = (Map<String, Collection<SoftError>>) o; if (softErrors == null) { softErrors = initializeSoftErrorMap(); } return softErrors; }
/** * Checks for return from a lookup or question, and restores the action form stored under the * request parameter docFormKey. */ @Override protected ActionForm processActionForm( HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) { String documentNumber = getDocumentNumber(request); if (documentNumber != null) { MDC.put(MDC_DOC_ID, documentNumber); } UserSession userSession = (UserSession) request.getSession().getAttribute(KRADConstants.USER_SESSION_KEY); String docFormKey = request.getParameter(KRADConstants.DOC_FORM_KEY); String methodToCall = request.getParameter(KRADConstants.DISPATCH_REQUEST_PARAMETER); String refreshCaller = request.getParameter(KRADConstants.REFRESH_CALLER); // String searchListRequestKey = request.getParameter(KRADConstants.SEARCH_LIST_REQUEST_KEY); String documentWebScope = request.getParameter(KRADConstants.DOCUMENT_WEB_SCOPE); if (mapping.getPath().startsWith(KRADConstants.REFRESH_MAPPING_PREFIX) || KRADConstants.RETURN_METHOD_TO_CALL.equalsIgnoreCase(methodToCall) || KRADConstants.QUESTION_REFRESH.equalsIgnoreCase(refreshCaller) || KRADConstants.TEXT_AREA_REFRESH.equalsIgnoreCase(refreshCaller) || KRADConstants.SESSION_SCOPE.equalsIgnoreCase(documentWebScope)) { ActionForm form = null; // check for search result storage and clear GlobalVariables.getUserSession().removeObjectsByPrefix(KRADConstants.SEARCH_LIST_KEY_PREFIX); // We put different type of forms such as document form, lookup form // in session but we only store document form in // database. if (userSession.retrieveObject(docFormKey) != null) { LOG.debug("getDecomentForm KualiDocumentFormBase from session"); form = (ActionForm) userSession.retrieveObject(docFormKey); } else if (StringUtils.isNotBlank(documentNumber)) { form = getSessionDocumentService() .getDocumentForm(documentNumber, docFormKey, userSession, request.getRemoteAddr()); } request.setAttribute(mapping.getAttribute(), form); if (!KRADConstants.SESSION_SCOPE.equalsIgnoreCase(documentWebScope)) { userSession.removeObject(docFormKey); } // we should check whether this is a multipart request because we // could have had a combination of query parameters and a multipart // request String contentType = request.getContentType(); String method = request.getMethod(); if (("POST".equalsIgnoreCase(method) && contentType != null && contentType.startsWith("multipart/form-data"))) { // this method parses the multipart request and adds new // non-file parameters into the request WebUtils.getMultipartParameters(request, null, form, mapping); } // The form can be null if the document is not a session document if (form != null) { return form; } } // Rice has the ability to limit file upload sizes on a per-form basis, // so the max upload sizes may be accessed by calling methods on // PojoFormBase. // This requires that we are able know the file upload size limit (i.e. // retrieve a form instance) before we parse a mulitpart request. ActionForm form = super.processActionForm(request, response, mapping); // for sessiondocument with multipart request String contentType = request.getContentType(); String method = request.getMethod(); if ("GET".equalsIgnoreCase(method) && StringUtils.isNotBlank(methodToCall) && form instanceof PojoForm && ((PojoForm) form) .getMethodToCallsToBypassSessionRetrievalForGETRequests() .contains(methodToCall)) { return createNewActionForm(mapping, request); } // if we have a multipart request, parse it and return the stored form // from session if the doc form key is not blank. If it is blank, then // we just return the form // generated from the superclass processActionForm method. Either way, // we need to parse the mulitpart request now so that we may determine // what the value of the doc form key is. // This is generally against the contract of processActionForm, because // processPopulate should be responsible for parsing the mulitpart // request, but we need to parse it now // to determine the doc form key value. if (("POST".equalsIgnoreCase(method) && contentType != null && contentType.startsWith("multipart/form-data"))) { WebUtils.getMultipartParameters(request, null, form, mapping); docFormKey = request.getParameter(KRADConstants.DOC_FORM_KEY); documentWebScope = request.getParameter(KRADConstants.DOCUMENT_WEB_SCOPE); documentNumber = getDocumentNumber(request); if (KRADConstants.SESSION_SCOPE.equalsIgnoreCase(documentWebScope) || (form instanceof KualiDocumentFormBase && WebUtils.isDocumentSession( ((KualiDocumentFormBase) form).getDocument(), (KualiDocumentFormBase) form))) { Object userSessionObject = userSession.retrieveObject(docFormKey); if (userSessionObject != null && userSessionObject instanceof ActionForm) { LOG.debug("getDocumentForm KualiDocumentFormBase from session"); form = (ActionForm) userSessionObject; } else { ActionForm tempForm = getSessionDocumentService() .getDocumentForm( documentNumber, docFormKey, userSession, request.getRemoteAddr()); if (tempForm != null) { form = tempForm; } } request.setAttribute(mapping.getAttribute(), form); if (form != null) { return form; } } } return form; }
/** * Builds the incident report model and view from the request that threw the exception * * @param request - the request * @param response - the response * @param handler - the current handler when the exception occurred * @param ex - the exception * @return the incident report model and view * @see * org.springframework.web.servlet.HandlerExceptionResolver#resolveException(javax.servlet.http.HttpServletRequest, * javax.servlet.http.HttpServletResponse, java.lang.Object, java.lang.Exception) */ @Override public ModelAndView resolveException( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { LOG.error("The following error was caught by the UifHandlerExceptionResolver : ", ex); // log exception LOG.error(ex.getMessage(), ex); String incidentDocId = request.getParameter(KRADConstants.DOCUMENT_DOCUMENT_NUMBER); String incidentViewId = ""; UifFormBase form = (UifFormBase) request.getAttribute(UifConstants.REQUEST_FORM); if (form instanceof DocumentFormBase) { if (((DocumentFormBase) form).getDocument() != null) { incidentDocId = ((DocumentFormBase) form).getDocument().getDocumentNumber(); } incidentViewId = ((DocumentFormBase) form).getViewId(); } if (GlobalVariables.getUifFormManager() != null) { GlobalVariables.getUifFormManager().removeSessionForm(form); } UserSession userSession = (UserSession) request.getSession().getAttribute(KRADConstants.USER_SESSION_KEY); IncidentReportForm incidentReportForm = new IncidentReportForm(); incidentReportForm.setSessionId(request.getSession().getId()); // Set the post url map to the incident report controller and not // the one the exception occurred on String postUrl = request.getRequestURL().toString(); postUrl = postUrl.substring(0, postUrl.lastIndexOf("/")) + "/incidentReport"; incidentReportForm.setFormPostUrl(postUrl); incidentReportForm.setException(ex); incidentReportForm.setIncidentDocId(incidentDocId); incidentReportForm.setIncidentViewId(incidentViewId); incidentReportForm.setController(handler.getClass().toString()); if (userSession != null) { incidentReportForm.setUserId(userSession.getPrincipalId()); incidentReportForm.setUserName(userSession.getPrincipalName()); incidentReportForm.setUserEmail(userSession.getPerson().getEmailAddress()); } incidentReportForm.setDevMode(!KRADUtils.isProductionEnvironment()); incidentReportForm.setViewId("Uif-IncidentReportView"); if (form != null) { incidentReportForm.setAjaxRequest(form.isAjaxRequest()); } else { String ajaxRequestParm = request.getParameter(UifParameters.AJAX_REQUEST); if (StringUtils.isNotBlank(ajaxRequestParm)) { incidentReportForm.setAjaxRequest(Boolean.parseBoolean(ajaxRequestParm)); } } // Set the view object incidentReportForm.setView(getViewService().getViewById("Uif-IncidentReportView")); // Set the ajax return type incidentReportForm.setAjaxReturnType(UifConstants.AjaxReturnTypes.UPDATEVIEW.getKey()); ModelAndView modelAndView = getModelAndViewService().getModelAndView(incidentReportForm, ""); try { getModelAndViewService().prepareView(request, modelAndView); } catch (Exception e) { LOG.error("An error stopped the incident form from loading", e); } return modelAndView; }