1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.kuali.rice.kns.web.struts.action;
18
19 import org.apache.commons.lang.StringUtils;
20 import org.apache.struts.action.ActionForm;
21 import org.apache.struts.action.ActionForward;
22 import org.apache.struts.action.ActionMapping;
23 import org.kuali.rice.core.util.RiceConstants;
24 import org.kuali.rice.kns.web.struts.form.QuestionPromptForm;
25 import org.kuali.rice.krad.exception.AuthorizationException;
26 import org.kuali.rice.krad.util.GlobalVariables;
27 import org.kuali.rice.krad.util.KRADConstants;
28 import org.kuali.rice.krad.util.UrlFactory;
29
30 import javax.servlet.http.HttpServletRequest;
31 import javax.servlet.http.HttpServletResponse;
32 import java.util.Properties;
33
34
35
36
37
38
39 public class QuestionPromptAction extends KualiAction {
40
41
42
43
44
45
46 @Override
47 protected void checkAuthorization(ActionForm form, String methodToCall)
48 throws AuthorizationException {
49
50 }
51
52
53
54
55
56
57
58
59
60
61
62 public ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
63
64 processErrorMessages(request);
65
66 return mapping.findForward(RiceConstants.MAPPING_BASIC);
67 }
68
69
70
71
72
73
74
75
76
77
78
79 public ActionForward processAnswer(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
80 QuestionPromptForm questionPromptForm = (QuestionPromptForm) form;
81
82 Properties parameters = new Properties();
83
84 parameters.put(KRADConstants.DOC_FORM_KEY, questionPromptForm.getFormKey());
85 parameters.put(KRADConstants.QUESTION_CLICKED_BUTTON, getSelectedButton(request));
86 parameters.put(KRADConstants.METHOD_TO_CALL_ATTRIBUTE, questionPromptForm.getCaller());
87 parameters.put(KRADConstants.REFRESH_CALLER, KRADConstants.QUESTION_REFRESH);
88 parameters.put(KRADConstants.QUESTION_INST_ATTRIBUTE_NAME, questionPromptForm.getQuestionIndex());
89 if(questionPromptForm.getDocNum() != null){
90 parameters.put(KRADConstants.DOC_NUM, questionPromptForm.getDocNum());
91 }
92
93 if (StringUtils.isNotBlank(questionPromptForm.getQuestionAnchor())) {
94 parameters.put(KRADConstants.ANCHOR, questionPromptForm.getQuestionAnchor());
95 }
96
97 String context = questionPromptForm.getContext();
98 if (StringUtils.isNotBlank(context)) {
99 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
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
117
118
119
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
133
134
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 }