1 /** 2 * Copyright 2005-2011 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.opensource.org/licenses/ecl2.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.kuali.rice.krad.datadictionary.validation; 17 18 import org.kuali.rice.core.api.exception.RiceRuntimeException; 19 import org.kuali.rice.krad.datadictionary.exporter.ExportMap; 20 21 import java.io.Serializable; 22 import java.util.regex.Matcher; 23 import java.util.regex.Pattern; 24 25 /** 26 * Abstraction of the regular expressions used to validate attribute values. 27 * 28 The validationPattern element defines the allowable character-level 29 or field-level values for an attribute. 30 31 JSTL: validationPattern is a Map which is accessed using a key 32 of "validationPattern". Each entry may contain some of the keys 33 listed below. The keys that may be present for a given attribute 34 are dependent upon the type of validationPattern. 35 36 * maxLength (String) 37 * exactLength 38 * type 39 * allowWhitespace 40 * allowUnderscore 41 * allowPeriod 42 * validChars 43 * precision 44 * scale 45 * allowNegative 46 47 The allowable keys (in addition to type) for each type are: 48 ****Type**** ***Keys*** 49 alphanumeric exactLength 50 maxLength 51 allowWhitespace 52 allowUnderscore 53 allowPeriod 54 55 alpha exactLength 56 maxLength 57 allowWhitespace 58 59 anyCharacter exactLength 60 maxLength 61 allowWhitespace 62 63 charset validChars 64 65 numeric exactLength 66 maxLength 67 68 fixedPoint allowNegative 69 precision 70 scale 71 72 floatingPoint allowNegative 73 74 date n/a 75 emailAddress n/a 76 javaClass n/a 77 month n/a 78 phoneNumber n/a 79 timestamp n/a 80 year n/a 81 zipcode n/a 82 83 Note: maxLength and exactLength are mutually exclusive. 84 If one is entered, the other may not be entered. 85 86 Note: See ApplicationResources.properties for 87 exact regex patterns. 88 e.g. validationPatternRegex.date for regex used in date validation. 89 */ 90 @Deprecated 91 abstract public class ValidationPattern implements Serializable { 92 // TODO: UNIT TEST: compile all patterns to test 93 94 /** 95 * @return regular expression Pattern generated by the individual ValidationPattern subclass 96 */ 97 abstract public Pattern getRegexPattern(); 98 99 /** 100 * @return String version of regular expression base, suitable for modification with length-specifiers and used internally by 101 * getRegexPattern 102 */ 103 abstract protected String getRegexString(); 104 105 106 /** 107 * @return true if the given String matches this pattern 108 */ 109 public boolean matches(String input) { 110 Pattern p = getRegexPattern(); 111 112 Matcher m = p.matcher(input); 113 114 return m.matches(); 115 } 116 117 /** 118 * @return ExportMap describing the subclass instance 119 */ 120 abstract public ExportMap buildExportMap(String exportKey); 121 122 abstract public String getValidationErrorMessageKey(); 123 124 public String[] getValidationErrorMessageParameters(String attributeLabel) { 125 return new String[] {attributeLabel}; 126 } 127 128 /** 129 * This method throws an exception if it is not configured properly 130 * 131 */ 132 public void completeValidation() throws ValidationPatternException { 133 } 134 135 /** exception thrown when a ValidationPattern is in an incorrect state. */ 136 public static class ValidationPatternException extends RiceRuntimeException { 137 138 private static final long serialVersionUID = 2012770642382150523L; 139 140 public ValidationPatternException(String message) { 141 super(message); 142 } 143 144 public ValidationPatternException() { 145 super(); 146 } 147 148 public ValidationPatternException(String message, Throwable cause) { 149 super(message, cause); 150 } 151 152 public ValidationPatternException(Throwable cause) { 153 super(cause); 154 } 155 } 156 }