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