001 /** 002 * Copyright 2005-2012 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.kew.preferences.web; 017 018 import java.util.regex.Matcher; 019 import java.util.regex.Pattern; 020 import javax.servlet.http.HttpServletRequest; 021 022 import org.apache.commons.lang.StringUtils; 023 import org.kuali.rice.core.api.exception.RiceRuntimeException; 024 import org.kuali.rice.kew.api.preferences.Preferences; 025 import org.kuali.rice.kew.preferences.web.PreferencesConstants; 026 import org.kuali.rice.kns.web.struts.form.KualiForm; 027 import org.kuali.rice.krad.exception.ValidationException; 028 import org.kuali.rice.krad.util.GlobalVariables; 029 import org.kuali.rice.krad.util.KRADConstants; 030 031 032 /** 033 * Struts ActionForm for {@link PreferencesAction}. 034 * 035 * @see PreferencesAction 036 * 037 * @author Kuali Rice Team (rice.collab@kuali.org) 038 */ 039 public class PreferencesForm extends KualiForm { 040 041 private static final long serialVersionUID = 4536869031291955777L; 042 private static final String ERR_KEY_REFRESH_RATE_WHOLE_NUM = "preferences.refreshRate"; 043 private static final String ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM = "preferences.pageSize"; 044 private Preferences.Builder preferences; 045 private String methodToCall = ""; 046 private String returnMapping; 047 private boolean showOutbox = true; 048 private String documentTypePreferenceName; 049 private String documentTypePreferenceValue; 050 051 // KULRICE-3137: Added a backLocation parameter similar to the one from lookups. 052 private String backLocation; 053 054 public String getReturnMapping() { 055 return returnMapping; 056 } 057 public void setReturnMapping(String returnMapping) { 058 this.returnMapping = returnMapping; 059 } 060 public PreferencesForm() { 061 preferences = Preferences.Builder.create(); 062 } 063 public String getMethodToCall() { 064 return methodToCall; 065 } 066 public void setMethodToCall(String methodToCall) { 067 Pattern p = Pattern.compile("\\w"); 068 if (!StringUtils.isBlank(methodToCall)) { 069 Matcher m = p.matcher(methodToCall); 070 if (m.find()) { 071 this.methodToCall = methodToCall; 072 } else { 073 throw new RiceRuntimeException("invalid characters found in the parameter methodToCall"); 074 } 075 } else { 076 this.methodToCall = methodToCall; 077 } 078 } 079 public Preferences.Builder getPreferences() { 080 return preferences; 081 } 082 public void setPreferences(Preferences.Builder preferences) { 083 this.preferences = preferences; 084 } 085 public boolean isShowOutbox() { 086 return this.showOutbox; 087 } 088 public void setShowOutbox(boolean showOutbox) { 089 this.showOutbox = showOutbox; 090 } 091 092 public String getBackLocation() { 093 return this.backLocation; 094 } 095 public void setBackLocation(String backLocation) { 096 this.backLocation = backLocation; 097 } 098 099 public String getDocumentTypePreferenceName() { 100 return documentTypePreferenceName; 101 } 102 103 public void setDocumentTypePreferenceName(String documentTypePreferenceName) { 104 this.documentTypePreferenceName = documentTypePreferenceName; 105 } 106 107 public String getDocumentTypePreferenceValue() { 108 return documentTypePreferenceValue; 109 } 110 111 public void setDocumentTypePreferenceValue(String documentTypePreferenceValue) { 112 this.documentTypePreferenceValue = documentTypePreferenceValue; 113 } 114 115 public Object getDocumentTypeNotificationPreference(String documentType) { 116 return preferences.getDocumentTypeNotificationPreference(documentType); 117 } 118 119 public void setDocumentTypeNotificationPreference(String documentType, String preferenceValue) { 120 preferences.addDocumentTypeNotificationPreference(documentType, preferenceValue); 121 } 122 123 /** 124 * Retrieves the "returnLocation" parameter after calling "populate" on the superclass. 125 * 126 * @see org.kuali.rice.krad.web.struts.form.KualiForm#populate(javax.servlet.http.HttpServletRequest) 127 */ 128 @Override 129 public void populate(HttpServletRequest request) { 130 super.populate(request); 131 132 if (getParameter(request, KRADConstants.RETURN_LOCATION_PARAMETER) != null) { 133 String returnLocation = getParameter(request, KRADConstants.RETURN_LOCATION_PARAMETER); 134 if(returnLocation.contains(">") || returnLocation.contains("<") || returnLocation.contains("\"")) { 135 returnLocation = returnLocation.replaceAll("\"", "%22"); 136 returnLocation = returnLocation.replaceAll("<", "%3C"); 137 returnLocation = returnLocation.replaceAll(">","%3E"); 138 139 } 140 setBackLocation(returnLocation); 141 } 142 } 143 144 public void validatePreferences() { 145 if((!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorSaved())) || 146 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorInitiated())) || 147 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorDisapproved())) || 148 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorEnroute())) || 149 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorApproved())) || 150 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorFinal())) || 151 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorProcessed())) || 152 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorException())) || 153 (!PreferencesConstants.PreferencesDocumentRouteStatusColors.getPreferencesDocumentRouteStatusColors().contains(preferences.getColorCanceled())) 154 ){ 155 throw new RiceRuntimeException("Preferences cannot be saved since they have been tampered with. Please refresh the page and try again"); 156 } 157 158 if(!PreferencesConstants.EmailNotificationPreferences.getEmailNotificationPreferences().contains(preferences.getEmailNotification())) { 159 throw new RiceRuntimeException("Email notifications cannot be saved since they have been tampered with. Please refresh the page and try again"); 160 } 161 162 if(!PreferencesConstants.DelegatorFilterValues.getDelegatorFilterValues().contains(preferences.getDelegatorFilter())) { 163 throw new RiceRuntimeException("Delegator filter values cannot be saved since they have been tampered with. Please refresh the page and try again"); 164 165 } 166 167 if(!PreferencesConstants.PrimaryDelegateFilterValues.getPrimaryDelegateFilterValues().contains(preferences.getPrimaryDelegateFilter())) { 168 throw new RiceRuntimeException("Primary delegator filter values cannot be saved since they have been tampered with. Please refresh the page and try again"); 169 } 170 171 if((!StringUtils.isBlank(preferences.getNotifyPrimaryDelegation())) && 172 (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getNotifyPrimaryDelegation()))) { 173 throw new RiceRuntimeException("Invalid value found for checkbox \"Recieve Primary Delegate Email\""); 174 } 175 176 if((!StringUtils.isBlank(preferences.getNotifySecondaryDelegation())) && 177 (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getNotifySecondaryDelegation()))) { 178 throw new RiceRuntimeException("Invalid value found for checkbox \"Recieve Secondary Delegate Email\""); 179 } 180 181 if((!StringUtils.isBlank(preferences.getShowDocType())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDocType())) || 182 (!StringUtils.isBlank(preferences.getShowDocTitle())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDocTitle())) || 183 (!StringUtils.isBlank(preferences.getShowActionRequested())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowActionRequested())) || 184 (!StringUtils.isBlank(preferences.getShowInitiator())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowInitiator())) || 185 (!StringUtils.isBlank(preferences.getShowDelegator())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDelegator())) || 186 (!StringUtils.isBlank(preferences.getShowDateCreated())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDateCreated())) || 187 (!StringUtils.isBlank(preferences.getShowDateApproved())) &&(!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDateApproved())) || 188 (!StringUtils.isBlank(preferences.getShowCurrentNode())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowCurrentNode())) || 189 (!StringUtils.isBlank(preferences.getShowWorkgroupRequest())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowWorkgroupRequest())) || 190 (!StringUtils.isBlank(preferences.getShowDocumentStatus())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowDocumentStatus())) || 191 (!StringUtils.isBlank(preferences.getShowClearFyi())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getShowClearFyi())) || 192 (!StringUtils.isBlank(preferences.getUseOutbox())) && (!PreferencesConstants.CheckBoxValues.getCheckBoxValues().contains(preferences.getUseOutbox()))) { 193 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"); 194 } 195 196 try { 197 new Integer(preferences.getRefreshRate().trim()); 198 } catch (NumberFormatException e) { 199 GlobalVariables.getMessageMap().putError(ERR_KEY_REFRESH_RATE_WHOLE_NUM, "general.message", "ActionList Refresh Rate must be in whole minutes"); 200 } catch (NullPointerException e1) { 201 GlobalVariables.getMessageMap().putError(ERR_KEY_REFRESH_RATE_WHOLE_NUM, "general.message", "ActionList Refresh Rate must be in whole minutes"); 202 } 203 204 try { 205 new Integer(preferences.getPageSize().trim()); 206 if((new Integer(preferences.getPageSize().trim()) <= 0) || (new Integer(preferences.getPageSize().trim()) > 500)) { 207 GlobalVariables.getMessageMap().putError(ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM, "general.message", "ActionList Page Size must be between 1 and 500"); 208 } 209 } catch (NumberFormatException e) { 210 GlobalVariables.getMessageMap().putError(ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM, "general.message", "ActionList Page Size must be in whole minutes"); 211 } catch (NullPointerException e1) { 212 GlobalVariables.getMessageMap().putError(ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM, "general.message", "ActionList Page Size must be in whole minutes"); 213 } 214 215 if (GlobalVariables.getMessageMap().hasErrors()) { 216 throw new ValidationException("errors in preferences"); 217 } 218 } 219 }