001 /**
002 * Copyright 2005-2014 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.rice.kns.web.struts.action;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.apache.struts.action.ActionForm;
020 import org.apache.struts.action.ActionForward;
021 import org.apache.struts.action.ActionMapping;
022 import org.kuali.rice.core.api.util.RiceConstants;
023 import org.kuali.rice.kns.web.struts.form.QuestionPromptForm;
024 import org.kuali.rice.krad.exception.AuthorizationException;
025 import org.kuali.rice.krad.util.GlobalVariables;
026 import org.kuali.rice.krad.util.KRADConstants;
027 import org.kuali.rice.krad.util.UrlFactory;
028
029 import javax.servlet.http.HttpServletRequest;
030 import javax.servlet.http.HttpServletResponse;
031 import java.util.Properties;
032
033 /**
034 * This class handles Actions for QuestionPromp.
035 *
036 * @deprecated KNS Struts deprecated, use KRAD and the Spring MVC framework.
037 */
038 @Deprecated
039 public class QuestionPromptAction extends KualiAction {
040
041 /**
042 * This overridden method ...
043 *
044 * @see org.kuali.rice.krad.web.struts.action.KualiAction#checkAuthorization(org.apache.struts.action.ActionForm, java.lang.String)
045 */
046 @Override
047 protected void checkAuthorization(ActionForm form, String methodToCall)
048 throws AuthorizationException {
049 // no authorization required
050 }
051
052 /**
053 * This method is the entry point action for the question prompt component.
054 *
055 * @param mapping
056 * @param form
057 * @param request
058 * @param response
059 * @return ActionForward
060 * @throws Exception
061 */
062 public ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
063 // deal with the fact that some requests might be reposts from errors on the reason field
064 processErrorMessages(request);
065
066 return mapping.findForward(RiceConstants.MAPPING_BASIC);
067 }
068
069 /**
070 * This method handles gathering all input and passing control back to the caller action.
071 *
072 * @param mapping
073 * @param form
074 * @param request
075 * @param response
076 * @return ActionForward
077 * @throws Exception
078 */
079 public ActionForward processAnswer(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
080 QuestionPromptForm questionPromptForm = (QuestionPromptForm) form;
081
082 Properties parameters = new Properties();
083
084 parameters.put(KRADConstants.DOC_FORM_KEY, questionPromptForm.getFormKey());
085 parameters.put(KRADConstants.QUESTION_CLICKED_BUTTON, getSelectedButton(request));
086 parameters.put(KRADConstants.METHOD_TO_CALL_ATTRIBUTE, questionPromptForm.getCaller());
087 parameters.put(KRADConstants.REFRESH_CALLER, KRADConstants.QUESTION_REFRESH);
088 parameters.put(KRADConstants.QUESTION_INST_ATTRIBUTE_NAME, questionPromptForm.getQuestionIndex());
089 if(questionPromptForm.getDocNum() != null){
090 parameters.put(KRADConstants.DOC_NUM, questionPromptForm.getDocNum());
091 }
092
093 if (StringUtils.isNotBlank(questionPromptForm.getQuestionAnchor())) {
094 parameters.put(KRADConstants.ANCHOR, questionPromptForm.getQuestionAnchor());
095 }
096
097 String context = questionPromptForm.getContext();
098 if (StringUtils.isNotBlank(context)) {
099 parameters.put(KRADConstants.QUESTION_CONTEXT, context);
100 }
101 String reason = questionPromptForm.getReason();
102 if (StringUtils.isNotBlank(reason)) {
103 parameters.put(KRADConstants.QUESTION_REASON_ATTRIBUTE_NAME, reason);
104 }
105 if (StringUtils.isNotBlank(questionPromptForm.getMethodToCallPath())) {
106 // For header tab navigation. Leaving it blank will just kick user back to page.
107 parameters.put(questionPromptForm.getMethodToCallPath(), "present");
108 }
109
110 String returnUrl = UrlFactory.parameterizeUrl(questionPromptForm.getBackLocation(), parameters);
111
112 return new ActionForward(returnUrl, true);
113 }
114
115 /**
116 * Parses the method to call attribute to pick off the button number that was pressed.
117 *
118 * @param request
119 * @return int
120 */
121 private String getSelectedButton(HttpServletRequest request) {
122 String selectedButton = "-1";
123 String parameterName = (String) request.getAttribute(KRADConstants.METHOD_TO_CALL_ATTRIBUTE);
124 if (StringUtils.isNotBlank(parameterName)) {
125 selectedButton = StringUtils.substringBetween(parameterName, ".button", ".");
126 }
127
128 return selectedButton;
129 }
130
131 /**
132 * This method handles processing any error messages coming in the door.
133 *
134 * @param request
135 */
136 private void processErrorMessages(HttpServletRequest request) {
137 String errorKey = request.getParameter(KRADConstants.QUESTION_ERROR_KEY);
138 String errorPropertyName = request.getParameter(KRADConstants.QUESTION_ERROR_PROPERTY_NAME);
139 String errorParameter = request.getParameter(KRADConstants.QUESTION_ERROR_PARAMETER);
140
141 if (StringUtils.isNotBlank(errorKey)) {
142 if (StringUtils.isBlank(errorPropertyName)) {
143 throw new IllegalStateException("Both the errorKey and the errorPropertyName must be filled in, " + "in order for errors to be displayed by the question component. Currently, " + "only the errorKey has a value specified.");
144 }
145 else {
146 if (StringUtils.isBlank(errorParameter)) {
147 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(errorPropertyName, errorKey);
148 }
149 else {
150 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(errorPropertyName, errorKey, errorParameter);
151 }
152 }
153 }
154 }
155 }