1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kew.preferences.web;
17
18 import java.util.regex.Matcher;
19 import java.util.regex.Pattern;
20
21 import javax.servlet.http.HttpServletRequest;
22
23 import org.apache.commons.lang.StringUtils;
24 import org.kuali.rice.core.api.exception.RiceRuntimeException;
25 import org.kuali.rice.kew.api.preferences.Preferences;
26 import org.kuali.rice.kns.util.WebUtils;
27 import org.kuali.rice.kns.web.struts.form.KualiForm;
28 import org.kuali.rice.krad.exception.ValidationException;
29 import org.kuali.rice.krad.util.GlobalVariables;
30 import org.kuali.rice.krad.util.KRADConstants;
31
32
33
34
35
36
37
38
39
40 public class PreferencesForm extends KualiForm {
41
42 private static final long serialVersionUID = 4536869031291955777L;
43 private static final String ERR_KEY_REFRESH_RATE_WHOLE_NUM = "preferences.refreshRate";
44 private static final String ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM = "preferences.pageSize";
45 private Preferences.Builder preferences;
46 private String methodToCall = "";
47 private String returnMapping;
48 private boolean showOutbox = true;
49 private String documentTypePreferenceName;
50 private String documentTypePreferenceValue;
51
52
53 private String backLocation;
54
55 public String getReturnMapping() {
56 return returnMapping;
57 }
58 public void setReturnMapping(String returnMapping) {
59 this.returnMapping = returnMapping;
60 }
61 public PreferencesForm() {
62 preferences = Preferences.Builder.create();
63 }
64 public String getMethodToCall() {
65 return methodToCall;
66 }
67 public void setMethodToCall(String methodToCall) {
68 Pattern p = Pattern.compile("\\w");
69 if (!StringUtils.isBlank(methodToCall)) {
70 Matcher m = p.matcher(methodToCall);
71 if (m.find()) {
72 this.methodToCall = methodToCall;
73 } else {
74 throw new RiceRuntimeException("invalid characters found in the parameter methodToCall");
75 }
76 } else {
77 this.methodToCall = methodToCall;
78 }
79 }
80 public Preferences.Builder getPreferences() {
81 return preferences;
82 }
83 public void setPreferences(Preferences.Builder preferences) {
84 this.preferences = preferences;
85 }
86 public boolean isShowOutbox() {
87 return this.showOutbox;
88 }
89 public void setShowOutbox(boolean showOutbox) {
90 this.showOutbox = showOutbox;
91 }
92
93 public String getBackLocation() {
94 return WebUtils.sanitizeBackLocation(this.backLocation);
95 }
96 public void setBackLocation(String backLocation) {
97 this.backLocation = backLocation;
98 }
99
100 public String getDocumentTypePreferenceName() {
101 return documentTypePreferenceName;
102 }
103
104 public void setDocumentTypePreferenceName(String documentTypePreferenceName) {
105 this.documentTypePreferenceName = documentTypePreferenceName;
106 }
107
108 public String getDocumentTypePreferenceValue() {
109 return documentTypePreferenceValue;
110 }
111
112 public void setDocumentTypePreferenceValue(String documentTypePreferenceValue) {
113 this.documentTypePreferenceValue = documentTypePreferenceValue;
114 }
115
116 public Object getDocumentTypeNotificationPreference(String documentType) {
117 return preferences.getDocumentTypeNotificationPreference(documentType);
118 }
119
120 public void setDocumentTypeNotificationPreference(String documentType, String preferenceValue) {
121 preferences.addDocumentTypeNotificationPreference(documentType, preferenceValue);
122 }
123
124
125
126
127
128
129 @Override
130 public void populate(HttpServletRequest request) {
131 super.populate(request);
132
133 if (getParameter(request, KRADConstants.RETURN_LOCATION_PARAMETER) != null) {
134 String returnLocation = getParameter(request, KRADConstants.RETURN_LOCATION_PARAMETER);
135 if(returnLocation.contains(">") || returnLocation.contains("<") || returnLocation.contains("\"")) {
136 returnLocation = returnLocation.replaceAll("\"", "%22");
137 returnLocation = returnLocation.replaceAll("<", "%3C");
138 returnLocation = returnLocation.replaceAll(">","%3E");
139
140 }
141 setBackLocation(returnLocation);
142 }
143 }
144
145 public void validatePreferences() {
146 if((!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorSaved())) ||
147 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorInitiated())) ||
148 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorDisapproved())) ||
149 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorEnroute())) ||
150 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorApproved())) ||
151 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorFinal())) ||
152 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorProcessed())) ||
153 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorException())) ||
154 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorCanceled()))
155 ){
156 throw new RiceRuntimeException("Preferences cannot be saved since they have been tampered with. Please refresh the page and try again");
157 }
158
159 if(!PreferencesConstants.EmailNotificationPreferences.getEmailNotificationPreferences().contains(preferences.getEmailNotification())) {
160 throw new RiceRuntimeException("Email notifications cannot be saved since they have been tampered with. Please refresh the page and try again");
161 }
162
163 if(!PreferencesConstants.DelegatorFilterValues.getDelegatorFilterValues().contains(preferences.getDelegatorFilter())) {
164 throw new RiceRuntimeException("Delegator filter values cannot be saved since they have been tampered with. Please refresh the page and try again");
165
166 }
167
168 if(!PreferencesConstants.PrimaryDelegateFilterValues.getPrimaryDelegateFilterValues().contains(preferences.getPrimaryDelegateFilter())) {
169 throw new RiceRuntimeException("Primary delegator filter values cannot be saved since they have been tampered with. Please refresh the page and try again");
170 }
171
172 if((!StringUtils.isBlank(preferences.getNotifyPrimaryDelegation())) &&
173 (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getNotifyPrimaryDelegation()))) {
174 throw new RiceRuntimeException("Invalid value found for checkbox \"Recieve Primary Delegate Email\"");
175 }
176
177 if((!StringUtils.isBlank(preferences.getNotifySecondaryDelegation())) &&
178 (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getNotifySecondaryDelegation()))) {
179 throw new RiceRuntimeException("Invalid value found for checkbox \"Recieve Secondary Delegate Email\"");
180 }
181
182 if((!StringUtils.isBlank(preferences.getShowDocType())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDocType())) ||
183 (!StringUtils.isBlank(preferences.getShowDocTitle())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDocTitle())) ||
184 (!StringUtils.isBlank(preferences.getShowActionRequested())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowActionRequested())) ||
185 (!StringUtils.isBlank(preferences.getShowInitiator())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowInitiator())) ||
186 (!StringUtils.isBlank(preferences.getShowDelegator())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDelegator())) ||
187 (!StringUtils.isBlank(preferences.getShowDateCreated())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDateCreated())) ||
188 (!StringUtils.isBlank(preferences.getShowDateApproved())) &&(!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDateApproved())) ||
189 (!StringUtils.isBlank(preferences.getShowCurrentNode())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowCurrentNode())) ||
190 (!StringUtils.isBlank(preferences.getShowWorkgroupRequest())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowWorkgroupRequest())) ||
191 (!StringUtils.isBlank(preferences.getShowDocumentStatus())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDocumentStatus())) ||
192 (!StringUtils.isBlank(preferences.getShowClearFyi())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowClearFyi())) ||
193 (!StringUtils.isBlank(preferences.getUseOutbox())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getUseOutbox()))) {
194 throw new RiceRuntimeException("Preferences for fields displayed in action list cannot be saved since they have in tampered with. Please refresh the page and try again");
195 }
196
197 try {
198 new Integer(preferences.getRefreshRate().trim());
199 } catch (NumberFormatException e) {
200 GlobalVariables.getMessageMap().putError(ERR_KEY_REFRESH_RATE_WHOLE_NUM, "general.message", "ActionList Refresh Rate must be in whole minutes");
201 } catch (NullPointerException e1) {
202 GlobalVariables.getMessageMap().putError(ERR_KEY_REFRESH_RATE_WHOLE_NUM, "general.message", "ActionList Refresh Rate must be in whole minutes");
203 }
204
205 try {
206 new Integer(preferences.getPageSize().trim());
207 if((new Integer(preferences.getPageSize().trim()) <= 0) || (new Integer(preferences.getPageSize().trim()) > 500)) {
208 GlobalVariables.getMessageMap().putError(ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM, "general.message", "ActionList Page Size must be between 1 and 500");
209 }
210 } catch (NumberFormatException e) {
211 GlobalVariables.getMessageMap().putError(ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM, "general.message", "ActionList Page Size must be a whole number");
212 } catch (NullPointerException e1) {
213 GlobalVariables.getMessageMap().putError(ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM, "general.message", "ActionList Page Size must be a whole number");
214 }
215
216 if (GlobalVariables.getMessageMap().hasErrors()) {
217 throw new ValidationException("errors in preferences");
218 }
219 }
220 }