1 /* 2 * Redistribution and use of this software and associated documentation ("Software"), with or 3 * without modification, are permitted provided that the following conditions are met: 4 * 5 * 1. Redistributions of source code must retain copyright statements and notices. Redistributions 6 * must also contain a copy of this document. 7 * 8 * 2. Redistributions in binary form must reproduce the above copyright notice, this list of 9 * conditions and the following disclaimer in the documentation and/or other materials provided with 10 * the distribution. 11 * 12 * 3. The name "Exolab" must not be used to endorse or promote products derived from this Software 13 * without prior written permission of Intalio, Inc. For written permission, please contact 14 * info@exolab.org. 15 * 16 * 4. Products derived from this Software may not be called "Exolab" nor may "Exolab" appear in 17 * their names without prior written permission of Intalio, Inc. Exolab is a registered trademark of 18 * Intalio, Inc. 19 * 20 * 5. Due credit should be given to the Exolab Project (http://www.exolab.org/). 21 * 22 * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 24 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTALIO, INC. OR ITS 25 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY 29 * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * 31 * Copyright 1999-2003 (C) Intalio, Inc. All Rights Reserved. 32 * 33 * $Id$ 34 */ 35 package org.exolab.castor.xml.validators; 36 37 import org.exolab.castor.xml.ValidationContext; 38 import org.exolab.castor.xml.ValidationException; 39 import org.exolab.castor.xml.XMLConstants; 40 41 /** 42 * The Name Validation class. This class handles validation for XML Name production types such as 43 * NCName and NMToken 44 * 45 * @author <a href="mailto:kvisco@intalio.com">Keith Visco</a> 46 * @version $Revision$ $Date: 2005-12-13 14:58:48 -0700 (Tue, 13 Dec 2005) $ 47 */ 48 public class NameValidator extends StringValidator { 49 50 /** 51 * XML name type NCName. @deprecated - use XMLConstants.NAME_TYPE_NCNAME. Retained for 52 * backwards-compatility. 53 */ 54 public static final short NCNAME = XMLConstants.NAME_TYPE_NCNAME; 55 56 /** 57 * XML name type NMTOKEN. @deprecated - use XMLConstants.NAME_TYPE_NCTOKEN. Retained for 58 * backwards-compatility. 59 */ 60 public static final short NMTOKEN = XMLConstants.NAME_TYPE_NMTOKEN; 61 62 /** 63 * XML name type CDATA. @deprecated - use XMLConstants.NAME_TYPE_CDATA. Retained for 64 * backwards-compatility. 65 */ 66 public static final short CDATA = XMLConstants.NAME_TYPE_CDATA; 67 68 /** Name type. */ 69 private short _type = XMLConstants.NAME_TYPE_NCNAME; 70 71 /** 72 * Creates a new NameValidator with the default validation set to NCName. 73 */ 74 public NameValidator() { 75 super(); 76 } // -- NameValidator 77 78 /** 79 * Creates a new NameValidator with the given validation type. 80 * 81 * @param type the validation type for this NameValidator 82 */ 83 public NameValidator(final short type) { 84 super(); 85 this._type = type; 86 } // -- NMTokenValidator 87 88 /** 89 * Sets whether or not a String is required (non null). 90 * 91 * @param required the flag indicating whether Strings are required 92 */ 93 public void setRequired(final boolean required) { 94 // not implemented? 95 } 96 97 /** 98 * Validates the given Object. 99 * 100 * @param value the string to validate 101 * @param context the ValidationContext 102 * @throws ValidationException if the object fails validation. 103 */ 104 public void validate(final String value, final ValidationContext context) 105 throws ValidationException { 106 super.validate(value, context); 107 108 switch (_type) { 109 case XMLConstants.NAME_TYPE_CDATA: 110 if (!ValidationUtils.isCDATA(value)) { 111 String err = "Name '" + value + "' is not a valid CDATA."; 112 throw new ValidationException(err); 113 } 114 break; 115 116 case XMLConstants.NAME_TYPE_NMTOKEN: 117 if (!ValidationUtils.isNMToken(value)) { 118 String err = "Name '" + value + "' is not a valid NMToken."; 119 throw new ValidationException(err); 120 } 121 break; 122 123 case XMLConstants.NAME_TYPE_QNAME: 124 if (!ValidationUtils.isQName(value)) { 125 String err = "Name '" + value + "' is not a valid QName."; 126 throw new ValidationException(err); 127 } 128 break; 129 130 case XMLConstants.NAME_TYPE_NCNAME: 131 default: 132 if (!ValidationUtils.isNCName(value)) { 133 String err = "Name '" + value + "' is not a valid NCName."; 134 throw new ValidationException(err); 135 } 136 break; 137 } 138 } // -- validate 139 140 /** 141 * Validates the given Object. 142 * 143 * @param object the Object to validate 144 * @throws ValidationException if the object fails validation. 145 */ 146 public void validate(final Object object) throws ValidationException { 147 validate(object, (ValidationContext) null); 148 } // -- validate 149 150 /** 151 * Validates the given Object. 152 * 153 * @param object the Object to validate 154 * @param context the ValidationContext 155 * @throws ValidationException if the object fails validation. 156 */ 157 public void validate(final Object object, final ValidationContext context) 158 throws ValidationException { 159 if (object != null) { 160 validate(object.toString(), context); 161 } else { 162 validate(null, context); 163 } 164 } // -- validate 165 166 } // -- NameValidator