View Javadoc

1   /**
2    * Copyright 2005-2015 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
101      *         internally by
102      *         getRegexPattern
103      */
104     abstract protected String getRegexString();
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     public void completeValidation() throws ValidationPatternException {
132     }
133 
134     /**
135      * exception thrown when a ValidationPattern is in an incorrect state.
136      */
137     public static class ValidationPatternException extends RiceRuntimeException {
138 
139         private static final long serialVersionUID = 2012770642382150523L;
140 
141         public ValidationPatternException(String message) {
142             super(message);
143         }
144 
145         public ValidationPatternException() {
146             super();
147         }
148 
149         public ValidationPatternException(String message, Throwable cause) {
150             super(message, cause);
151         }
152 
153         public ValidationPatternException(Throwable cause) {
154             super(cause);
155         }
156     }
157 }