KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > org > apache > xerces > internal > impl > validation > ValidationState


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 2001, 2002 The Apache Software Foundation.
6  * All rights 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) 2001, 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 com.sun.org.apache.xerces.internal.impl.validation;
59
60 import com.sun.org.apache.xerces.internal.util.SymbolTable;
61 import com.sun.org.apache.xerces.internal.impl.dv.ValidationContext;
62
63 import com.sun.org.apache.xerces.internal.xni.NamespaceContext;
64 import java.util.Hashtable JavaDoc;
65 import java.util.Enumeration JavaDoc;
66
67 /**
68  * Implementation of ValidationContext inteface. Used to establish an
69  * environment for simple type validation.
70  *
71  * @author Elena Litani, IBM
72  * @version $Id: ValidationState.java,v 1.13 2003/06/05 21:50:30 neilg Exp $
73  */

74 public class ValidationState implements ValidationContext {
75
76     //
77
// private data
78
//
79
private boolean fExtraChecking = true;
80     private boolean fFacetChecking = true;
81     private boolean fNormalize = true;
82     private boolean fNamespaces = true;
83
84     private EntityState fEntityState = null;
85     private NamespaceContext fNamespaceContext = null;
86     private SymbolTable fSymbolTable = null;
87
88     //REVISIT: Should replace with a lighter structure.
89
private final Hashtable JavaDoc fIdTable = new Hashtable JavaDoc();
90     private final Hashtable JavaDoc fIdRefTable = new Hashtable JavaDoc();
91     private final static Object JavaDoc fNullValue = new Object JavaDoc();
92
93     //
94
// public methods
95
//
96
public void setExtraChecking(boolean newValue) {
97         fExtraChecking = newValue;
98     }
99
100     public void setFacetChecking(boolean newValue) {
101         fFacetChecking = newValue;
102     }
103
104     public void setNormalizationRequired (boolean newValue) {
105           fNormalize = newValue;
106     }
107
108     public void setUsingNamespaces (boolean newValue) {
109           fNamespaces = newValue;
110     }
111
112     public void setEntityState(EntityState state) {
113         fEntityState = state;
114     }
115
116     public void setNamespaceSupport(NamespaceContext namespace) {
117         fNamespaceContext = namespace;
118     }
119
120     public void setSymbolTable(SymbolTable sTable) {
121         fSymbolTable = sTable;
122     }
123
124     /**
125      * return null if all IDREF values have a corresponding ID value;
126      * otherwise return the first IDREF value without a matching ID value.
127      */

128     public String JavaDoc checkIDRefID () {
129         Enumeration JavaDoc en = fIdRefTable.keys();
130
131         String JavaDoc key;
132         while (en.hasMoreElements()) {
133             key = (String JavaDoc)en.nextElement();
134             if (!fIdTable.containsKey(key)) {
135                   return key;
136             }
137         }
138         return null;
139     }
140
141     public void reset () {
142         fExtraChecking = true;
143         fFacetChecking = true;
144         fNamespaces = true;
145         fIdTable.clear();
146         fIdRefTable.clear();
147         fEntityState = null;
148         fNamespaceContext = null;
149         fSymbolTable = null;
150     }
151
152     /**
153      * The same validation state can be used to validate more than one (schema)
154      * validation roots. Entity/Namespace/Symbol are shared, but each validation
155      * root needs its own id/idref tables. So we need this method to reset only
156      * the two tables.
157      */

158     public void resetIDTables() {
159         fIdTable.clear();
160         fIdRefTable.clear();
161     }
162
163     //
164
// implementation of ValidationContext methods
165
//
166

167     // whether to do extra id/idref/entity checking
168
public boolean needExtraChecking() {
169         return fExtraChecking;
170     }
171
172     // whether to validate against facets
173
public boolean needFacetChecking() {
174         return fFacetChecking;
175     }
176
177     public boolean needToNormalize (){
178         return fNormalize;
179     }
180
181     public boolean useNamespaces() {
182         return fNamespaces;
183     }
184
185     // entity
186
public boolean isEntityDeclared (String JavaDoc name) {
187         if (fEntityState !=null) {
188             return fEntityState.isEntityDeclared(getSymbol(name));
189         }
190         return false;
191     }
192     public boolean isEntityUnparsed (String JavaDoc name) {
193         if (fEntityState !=null) {
194             return fEntityState.isEntityUnparsed(getSymbol(name));
195         }
196         return false;
197     }
198
199     // id
200
public boolean isIdDeclared(String JavaDoc name) {
201         return fIdTable.containsKey(name);
202     }
203     public void addId(String JavaDoc name) {
204         fIdTable.put(name, fNullValue);
205     }
206
207     // idref
208
public void addIdRef(String JavaDoc name) {
209         fIdRefTable.put(name, fNullValue);
210     }
211     // get symbols
212

213     public String JavaDoc getSymbol (String JavaDoc symbol) {
214         if (fSymbolTable != null)
215             return fSymbolTable.addSymbol(symbol);
216         // if there is no symbol table, we return java-internalized string,
217
// because symbol table strings are also java-internalzied.
218
// this guarantees that the returned string from this method can be
219
// compared by reference with other symbol table string. -SG
220
return symbol.intern();
221     }
222     // qname, notation
223
public String JavaDoc getURI(String JavaDoc prefix) {
224         if (fNamespaceContext !=null) {
225             return fNamespaceContext.getURI(prefix);
226         }
227         return null;
228     }
229
230 }
231
Popular Tags