KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > apache > xerces > validators > datatype > BooleanDatatypeValidator


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 1999, 2000 The Apache Software Foundation. All rights
6  * reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Apache Software Foundation (http://www.apache.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Xerces" and "Apache Software Foundation" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation and was
52  * originally based on software copyright (c) 1999, International
53  * Business Machines, Inc., http://www.apache.org. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  */

57
58 package org.enhydra.apache.xerces.validators.datatype;
59
60 import java.util.Enumeration JavaDoc;
61 import java.util.Hashtable JavaDoc;
62
63 import org.enhydra.apache.xerces.utils.regex.RegularExpression;
64 import org.enhydra.apache.xerces.validators.schema.SchemaSymbols;
65 /**
66  *
67  * BooleanValidator validates that content satisfies the W3C XML Datatype for Boolean
68  *
69  * @author Ted Leung
70  * @author Jeffrey Rodriguez
71  * @author Mark Swinkles - List Validation refactoring
72  * @version $Id: BooleanDatatypeValidator.java,v 1.2 2005/01/26 08:28:44 jkjome Exp $
73  */

74
75 public class BooleanDatatypeValidator extends AbstractDatatypeValidator {
76     
77     private static final String JavaDoc fValueSpace[] = { "false", "true", "0", "1"};
78
79     public BooleanDatatypeValidator () throws InvalidDatatypeFacetException {
80        this( null, null, false ); // Native, No Facets defined, Restriction
81
}
82
83     public BooleanDatatypeValidator ( DatatypeValidator base, Hashtable JavaDoc facets,
84                  boolean derivedByList ) throws InvalidDatatypeFacetException {
85         fBaseValidator = base; // Set base type
86

87         // list types are handled by ListDatatypeValidator, we do nothing here.
88
if ( derivedByList )
89             return;
90
91         // Set Facets if any defined
92
if ( facets != null ) {
93             for (Enumeration JavaDoc e = facets.keys(); e.hasMoreElements();) {
94                 String JavaDoc key = (String JavaDoc) e.nextElement();
95
96                 if (key.equals(SchemaSymbols.ELT_PATTERN)) {
97                     fFacetsDefined |= DatatypeValidator.FACET_PATTERN;
98                     fPattern = (String JavaDoc)facets.get(key);
99                     if( fPattern != null )
100                        fRegex = new RegularExpression(fPattern, "X" );
101                 } else {
102                     throw new InvalidDatatypeFacetException( getErrorString(DatatypeMessageProvider.ILLEGAL_BOOLEAN_FACET,
103                                                                              DatatypeMessageProvider.MSG_NONE, new Object JavaDoc[] { key }));
104                 }
105             }
106         }// End of facet setting
107
}
108
109     /**
110      * validate that a string matches the boolean datatype
111      * @param content A string containing the content to be validated
112      *
113      * @exception throws InvalidDatatypeException if the content is
114      * is not valid.
115      */

116
117     public Object JavaDoc validate(String JavaDoc content, Object JavaDoc state) throws InvalidDatatypeValueException {
118         checkContent( content, false );
119         return null;
120     }
121
122
123     /**
124      * Compare two boolean data types
125      *
126      * @param content1
127      * @param content2
128      * @return 0 if equal, 1 if not equal
129      */

130     public int compare( String JavaDoc content1, String JavaDoc content2){
131         if (content1.equals(content2)) {
132             return 0;
133         }
134         Boolean JavaDoc b1 = Boolean.valueOf(content1);
135         Boolean JavaDoc b2 = Boolean.valueOf(content2);
136
137         return (b1.equals(b2))?0:1;
138     }
139
140     /**
141      * Return a Hashtable that contains facet information
142      *
143      * @return Hashtable
144      */

145
146     public Hashtable JavaDoc getFacets(){
147         return null;
148     }
149
150     //Begin private method definitions
151

152    /**
153      * Returns a copy of this object.
154      */

155     public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
156         throw new CloneNotSupportedException JavaDoc("clone() is not supported in "+this.getClass().getName());
157     }
158
159
160     /**
161      * Checks content for validity.
162      *
163      * @param content
164      * @exception InvalidDatatypeValueException
165      */

166     private void checkContent( String JavaDoc content, boolean asBase )
167     throws InvalidDatatypeValueException {
168         // validate against parent type if any
169
if ( this.fBaseValidator != null ) {
170             // validate content as a base type
171
((BooleanDatatypeValidator)fBaseValidator).checkContent(content, true);
172         }
173
174         // we check pattern first
175
if ( (fFacetsDefined & DatatypeValidator.FACET_PATTERN ) != 0 ) {
176             if ( fRegex == null || fRegex.matches( content) == false )
177                 throw new InvalidDatatypeValueException("Value'"+content+
178                                                         "does not match regular expression facet" + fPattern );
179         }
180
181         // if this is a base validator, we only need to check pattern facet
182
// all other facet were inherited by the derived type
183
if (asBase)
184             return;
185
186         boolean isContentInDomain = false;
187         for ( int i = 0;i<fValueSpace.length;i++ ) {
188             if ( content.equals(fValueSpace[i] ) )
189                 isContentInDomain = true;
190         }
191         if (isContentInDomain == false)
192             throw new InvalidDatatypeValueException(
193                                                    getErrorString(DatatypeMessageProvider.NOT_BOOLEAN,
194                                                                   DatatypeMessageProvider.MSG_NONE,
195                                                                   new Object JavaDoc[] { content}));
196     }
197 }
198
Popular Tags