001/**
002 * Copyright 2005-2015 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 */
016package org.kuali.rice.kns.datadictionary.validation.charlevel;
017
018import org.apache.commons.lang.StringUtils;
019import org.apache.log4j.Logger;
020import org.kuali.rice.krad.datadictionary.exporter.ExportMap;
021import 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 */
029public 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}