1 15 package org.apache.tapestry.valid; 16 17 import java.util.HashMap ; 18 import java.util.Map ; 19 20 import org.apache.hivemind.ApplicationRuntimeException; 21 import org.apache.tapestry.IMarkupWriter; 22 import org.apache.tapestry.IRequestCycle; 23 import org.apache.tapestry.Tapestry; 24 import org.apache.tapestry.form.IFormComponent; 25 import org.apache.tapestry.util.RegexpMatcher; 26 27 45 public class PatternValidator extends BaseValidator 46 { 47 51 private String _patternString = ""; 52 53 56 private String _patternNotMatchedMessage; 57 58 61 private PatternDelegate _patternDelegate; 62 63 66 private String _scriptPath = "/org/apache/tapestry/valid/PatternValidator.script"; 67 68 73 public String getPatternNotMatchedMessage() 74 { 75 return _patternNotMatchedMessage; 76 } 77 78 81 public String getPatternString() 82 { 83 return _patternString; 84 } 85 86 89 public void setPatternNotMatchedMessage(String message) 90 { 91 _patternNotMatchedMessage = message; 92 } 93 94 97 public void setPatternString(String pattern) 98 { 99 _patternString = pattern; 100 } 101 102 106 private static class RegExpDelegate implements PatternDelegate 107 { 108 private RegexpMatcher _matcher; 109 110 private RegexpMatcher getPatternMatcher() 111 { 112 if (_matcher == null) 113 _matcher = new RegexpMatcher(); 114 115 return _matcher; 116 } 117 118 public boolean contains(String patternString, String input) 119 { 120 return getPatternMatcher().contains(patternString, input); 121 } 122 123 public String getEscapedPatternString(String patternString) 124 { 125 return getPatternMatcher().getEscapedPatternString(patternString); 126 } 127 } 128 129 133 public void setPatternDelegate(PatternDelegate patternDelegate) 134 { 135 _patternDelegate = patternDelegate; 136 } 137 138 142 public PatternDelegate getPatternDelegate() 143 { 144 if (_patternDelegate == null) 145 _patternDelegate = new RegExpDelegate(); 146 147 return _patternDelegate; 148 } 149 150 153 public String toString(IFormComponent field, Object value) 154 { 155 if (value == null) 156 return null; 157 158 return value.toString(); 159 } 160 161 private String buildPatternNotMatchedMessage(IFormComponent field, String patternString) 162 { 163 String templateMessage = 164 getPattern( 165 _patternNotMatchedMessage, 166 "pattern-not-matched", 167 field.getPage().getLocale()); 168 169 return formatString(templateMessage, field.getDisplayName(), patternString); 170 } 171 172 175 public Object toObject(IFormComponent field, String input) throws ValidatorException 176 { 177 if (checkRequired(field, input)) 178 return null; 179 180 boolean matched = false; 181 182 try 183 { 184 matched = getPatternDelegate().contains(_patternString, input); 185 } 186 catch (Throwable t) 187 { 188 throw new ApplicationRuntimeException( 189 Tapestry.format( 190 "PatternValidator.pattern-match-error", 191 _patternString, 192 field.getDisplayName()), 193 field, 194 field.getLocation(), 195 t); 196 } 197 198 if (!matched) 199 throw new ValidatorException( 200 buildPatternNotMatchedMessage(field, _patternString), 201 ValidationConstraint.PATTERN_MISMATCH); 202 203 return input; 204 } 205 206 209 public void setScriptPath(String scriptPath) 210 { 211 _scriptPath = scriptPath; 212 } 213 214 217 public void renderValidatorContribution( 218 IFormComponent field, 219 IMarkupWriter writer, 220 IRequestCycle cycle) 221 { 222 if (!isClientScriptingEnabled()) 223 return; 224 225 Map symbols = new HashMap (); 226 227 if (isRequired()) 228 symbols.put("requiredMessage", buildRequiredMessage(field)); 229 230 symbols.put( 231 "patternNotMatchedMessage", 232 buildPatternNotMatchedMessage(field, getEscapedPatternString())); 233 234 processValidatorScript(_scriptPath, cycle, field, symbols); 235 } 236 237 240 public String getEscapedPatternString() 241 { 242 return getPatternDelegate().getEscapedPatternString(_patternString); 243 } 244 245 public String toString() 246 { 247 return "Pattern: " 248 + _patternString 249 + "; Script Path: " 250 + _scriptPath 251 + "; Pattern Delegate: " 252 + _patternDelegate; 253 } 254 } 255 | Popular Tags |