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.kns.datadictionary.validation.charlevel;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.apache.log4j.Logger;
020 import org.kuali.rice.krad.datadictionary.exporter.ExportMap;
021 import org.kuali.rice.krad.datadictionary.validation.CharacterLevelValidationPattern;
022
023 /**
024 * This is a description of what this class does - ctdang don't forget to fill this in.
025 *
026 * @author Kuali Rice Team (rice.collab@kuali.org)
027 *
028 */
029 public class RegexValidationPattern extends CharacterLevelValidationPattern {
030
031 private static final long serialVersionUID = -5642894236634278352L;
032 private static final Logger LOG=Logger.getLogger(RegexValidationPattern.class);
033 /**
034 * Regular expression, e.g. "[a-zA-Z0-9]"
035 */
036 private String pattern;
037
038 private String validationErrorMessageKey;
039 /**
040 * This exports a representation of this instance by an ExportMap.
041 *
042 * @see org.kuali.rice.krad.datadictionary.validation.CharacterLevelValidationPattern#extendExportMap(org.kuali.rice.krad.datadictionary.exporter.ExportMap)
043 */
044 @Override
045 public void extendExportMap(ExportMap exportMap) {
046 if (LOG.isTraceEnabled()) {
047 String message=String.format("ENTRY %s",
048 (exportMap==null)?"null":exportMap.toString());
049 LOG.trace(message);
050 }
051
052 // Set element value
053 exportMap.set("type", "regex");
054 // Set attribute (of the above element) value
055 exportMap.set("pattern", getPattern());
056
057 if (LOG.isTraceEnabled()) {
058 String message=String.format("EXIT %s",
059 (exportMap==null)?"null":exportMap.toString());
060 LOG.trace(message);
061 }
062
063 }
064
065 /**
066 * This returns an instance of this class as string.
067 *
068 * @see org.kuali.rice.krad.datadictionary.validation.ValidationPattern#getPatternXml()
069 */
070 public String getPatternXml() {
071 if (LOG.isTraceEnabled()) {
072 String message=String.format("ENTRY");
073 LOG.trace(message);
074 }
075
076 StringBuffer xml = new StringBuffer("<regex ");
077 xml.append(pattern);
078 xml.append("/>");
079
080 if (LOG.isTraceEnabled()) {
081 String message=String.format("EXIT %s", xml.toString());
082 LOG.trace(message);
083 }
084
085 return xml.toString();
086 }
087
088 /**
089 * This returns the specified regular expression defined in the data dictionary
090 * entry for validating the value of an attribute.
091 *
092 * @see org.kuali.rice.krad.datadictionary.validation.ValidationPattern#getRegexString()
093 */
094 @Override
095 protected String getRegexString() {
096 if (LOG.isTraceEnabled()) {
097 String message=String.format("ENTRY %s",
098 (pattern==null)?"null":pattern.toString());
099 LOG.trace(message);
100 }
101
102 if (StringUtils.isEmpty(pattern)) {
103 throw new IllegalStateException(this.getClass().getName()+".pattern is empty");
104 }
105
106 if (LOG.isTraceEnabled()) {
107 String message=String.format("EXIT");
108 LOG.trace(message);
109 }
110
111 return pattern;
112 }
113
114 /**
115 * @return the pattern
116 */
117 public final String getPattern() {
118 return this.pattern;
119 }
120
121 /**
122 * @param pattern the pattern to set
123 */
124 public final void setPattern(String pattern) {
125 this.pattern = pattern;
126 }
127
128 /**
129 * @return the validationErrorMessageKey
130 */
131 @Override
132 public String getValidationErrorMessageKey() {
133 return this.validationErrorMessageKey;
134 }
135
136 /**
137 * @param validationErrorMessageKey a message key from the application's message resource bundle signifying the error message
138 * to display if some validation does not match this pattern
139 */
140 public void setValidationErrorMessageKey(String validationErrorMessageKey) {
141 this.validationErrorMessageKey = validationErrorMessageKey;
142 }
143
144 /**
145 * @see org.kuali.rice.krad.datadictionary.validation.ValidationPattern#completeValidation()
146 */
147 @Override
148 public void completeValidation() {
149 super.completeValidation();
150 if (StringUtils.isBlank(validationErrorMessageKey)) {
151 throw new ValidationPatternException("Regex Validation Patterns must have a validation error message key defined");
152 }
153 }
154 }