001 /**
002 * Copyright 2005-2013 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.krad.datadictionary.validation.constraint;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.rice.krad.datadictionary.parse.BeanTag;
020 import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
021 import org.kuali.rice.krad.datadictionary.parse.BeanTags;
022 import org.kuali.rice.krad.uif.UifConstants;
023
024 /**
025 * A ValidCharactersConstraint based on AlphaNumericValidationPattern.
026 *
027 * @author Kuali Rice Team (rice.collab@kuali.org)
028 */
029 @BeanTags({@BeanTag(name = "alphaNumericPatternConstraint-bean", parent="AlphaNumericPatternConstraint"),
030 @BeanTag(name = "alphaNumericWithBasicPunc-bean", parent="AlphaNumericWithBasicPunc")})
031 public class AlphaNumericPatternConstraint extends AllowCharacterConstraint {
032 protected boolean lowerCase = false;
033 protected boolean upperCase = false;
034
035 /**
036 * A label key is auto generated for this bean if none is set. This generated message can be
037 * overridden through setMessageKey, but the generated message should cover most cases.
038 *
039 * @see org.kuali.rice.krad.datadictionary.validation.constraint.BaseConstraint#getMessageKey()
040 */
041 @Override
042 public String getMessageKey() {
043 if (StringUtils.isEmpty(messageKey)) {
044 StringBuilder key = new StringBuilder("");
045 if (lowerCase) {
046 return (UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "alphanumericPatternLowerCase");
047 } else if (upperCase) {
048 return (UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "alphanumericPatternUpperCase");
049 } else {
050 return (UifConstants.Messages.VALIDATION_MSG_KEY_PREFIX + "alphanumericPattern");
051 }
052 }
053
054 return messageKey;
055 }
056
057 /**
058 * @see org.kuali.rice.krad.datadictionary.validation.constraint.ValidCharactersPatternConstraint#getRegexString()
059 */
060 @Override
061 protected String getRegexString() {
062 StringBuilder regexString = new StringBuilder("[A-Za-z0-9");
063 /*
064 * This check must be first because we are removing the base 'A-Z' if lowerCase == true
065 */
066 if (lowerCase) {
067 regexString = new StringBuilder("[a-z0-9");
068 } else if (upperCase) {
069 regexString = new StringBuilder("[A-Z0-9");
070 }
071
072 regexString.append(this.getAllowedCharacterRegex());
073
074 regexString.append("]");
075
076 return regexString.toString();
077 }
078
079 /**
080 * @return the lowerCase
081 */
082 @BeanTagAttribute(name = "lowerCase")
083 public boolean isLowerCase() {
084 return this.lowerCase;
085 }
086
087 /**
088 * Only allow lowerCase characters. DO NOT use with upperCase option, no flags set for case
089 * means both upper and lower case are allowed.
090 *
091 * @param lowerCase the lowerCase to set
092 */
093 public void setLowerCase(boolean lowerCase) {
094 this.lowerCase = lowerCase;
095 }
096
097 @BeanTagAttribute(name = "upperCase")
098 public boolean isUpperCase() {
099 return upperCase;
100 }
101
102 /**
103 * Only allow upperCase characters. DO NOT use with lowerCase option, no flags set for case
104 * means both upper and lower case are allowed.
105 *
106 * @param upperCase the lowerCase to set
107 */
108 public void setUpperCase(boolean upperCase) {
109 this.upperCase = upperCase;
110 }
111 }