1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 /*
19 * $Id: AbstractStringValidator.hpp 695949 2008-09-16 15:57:44Z borisk $
20 */
21
22 #if !defined(XERCESC_INCLUDE_GUARD_ABSTRACT_STRING_VALIDATOR_HPP)
23 #define XERCESC_INCLUDE_GUARD_ABSTRACT_STRING_VALIDATOR_HPP
24
25 #include <xercesc/validators/datatype/DatatypeValidator.hpp>
26
27 XERCES_CPP_NAMESPACE_BEGIN
28
29 class VALIDATORS_EXPORT AbstractStringValidator : public DatatypeValidator
30 {
31 public:
32
33 // -----------------------------------------------------------------------
34 // Public ctor/dtor
35 // -----------------------------------------------------------------------
36 /** @name Constructor. */
37 //@{
38
39 virtual ~AbstractStringValidator();
40
41 //@}
42
43 virtual const RefArrayVectorOf<XMLCh>* getEnumString() const;
44
45 // -----------------------------------------------------------------------
46 // Validation methods
47 // -----------------------------------------------------------------------
48 /** @name Validation Function */
49 //@{
50
51 /**
52 * validate that a string matches the boolean datatype
53 * @param content A string containing the content to be validated
54 *
55 * @exception throws InvalidDatatypeException if the content is
56 * is not valid.
57 */
58
59 virtual void validate
60 (
61 const XMLCh* const content
62 , ValidationContext* const context = 0
63 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
64 );
65
66 //@}
67
68 // -----------------------------------------------------------------------
69 // Compare methods
70 // -----------------------------------------------------------------------
71 /** @name Compare Function */
72 //@{
73
74 virtual int compare(const XMLCh* const, const XMLCh* const
75 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
76 );
77
78 //@}
79
80 /***
81 * Support for Serialization/De-serialization
82 ***/
83 DECL_XSERIALIZABLE(AbstractStringValidator)
84
85 protected:
86
87 AbstractStringValidator
88 (
89 DatatypeValidator* const baseValidator
90 , RefHashTableOf<KVStringPair>* const facets
91 , const int finalSet
92 , const ValidatorType type
93 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
94 );
95
96 void init(RefArrayVectorOf<XMLCh>* const enums
97 , MemoryManager* const manager);
98
99 //
100 // Abstract interface
101 //
102 virtual void assignAdditionalFacet(const XMLCh* const key
103 , const XMLCh* const value
104 , MemoryManager* const manager);
105
106 virtual void inheritAdditionalFacet();
107
108 virtual void checkAdditionalFacetConstraints(MemoryManager* const manager) const;
109
110 virtual void checkAdditionalFacet(const XMLCh* const content
111 , MemoryManager* const manager) const;
112
113 virtual XMLSize_t getLength(const XMLCh* const content
114 , MemoryManager* const manager) const;
115
116 virtual void checkValueSpace(const XMLCh* const content
117 , MemoryManager* const manager) = 0;
118
119 //
120 // to Allow ListDTV to overwrite
121 //
122 virtual void inspectFacetBase(MemoryManager* const manager);
123
124 virtual void inheritFacet();
125
126 virtual void checkContent(const XMLCh* const content
127 , ValidationContext* const context
128 , bool asBase
129 , MemoryManager* const manager);
130
131 /*
132 ** Base64BinaryDatatypeValidator to overwrite
133 */
134 virtual void normalizeEnumeration(MemoryManager* const manager);
135
136 virtual void normalizeContent(XMLCh* const, MemoryManager* const manager) const;
137
138 public:
139 // -----------------------------------------------------------------------
140 // Getter methods
141 // -----------------------------------------------------------------------
142
143 inline XMLSize_t getLength() const;
144
145 inline XMLSize_t getMaxLength() const;
146
147 inline XMLSize_t getMinLength() const;
148
149 inline RefArrayVectorOf<XMLCh>* getEnumeration() const;
150
151 protected:
152 // -----------------------------------------------------------------------
153 // Setter methods
154 // -----------------------------------------------------------------------
155
156 inline void setLength(XMLSize_t);
157
158 inline void setMaxLength(XMLSize_t);
159
160 inline void setMinLength(XMLSize_t);
161
162 inline void setEnumeration(RefArrayVectorOf<XMLCh>*, bool);
163
164 private:
165
166 void assignFacet(MemoryManager* const manager);
167
168 void inspectFacet(MemoryManager* const manager);
169
170 // -----------------------------------------------------------------------
171 // Unimplemented constructors and operators
172 // -----------------------------------------------------------------------
173 AbstractStringValidator(const AbstractStringValidator&);
174 AbstractStringValidator& operator=(const AbstractStringValidator&);
175
176 // -----------------------------------------------------------------------
177 // Private data members
178 //
179 // -----------------------------------------------------------------------
180 XMLSize_t fLength;
181 XMLSize_t fMaxLength;
182 XMLSize_t fMinLength;
183 bool fEnumerationInherited;
184 RefArrayVectorOf<XMLCh>* fEnumeration;
185 };
186
187 // -----------------------------------------------------------------------
188 // Getter methods
189 // -----------------------------------------------------------------------
190
getLength() const191 inline XMLSize_t AbstractStringValidator::getLength() const
192 {
193 return fLength;
194 }
195
getMaxLength() const196 inline XMLSize_t AbstractStringValidator::getMaxLength() const
197 {
198 return fMaxLength;
199 }
200
getMinLength() const201 inline XMLSize_t AbstractStringValidator::getMinLength() const
202 {
203 return fMinLength;
204 }
205
getEnumeration() const206 inline RefArrayVectorOf<XMLCh>* AbstractStringValidator:: getEnumeration() const
207 {
208 return fEnumeration;
209 }
210
211 // -----------------------------------------------------------------------
212 // Setter methods
213 // -----------------------------------------------------------------------
214
setLength(XMLSize_t newLength)215 inline void AbstractStringValidator::setLength(XMLSize_t newLength)
216 {
217 fLength = newLength;
218 }
219
setMaxLength(XMLSize_t newMaxLength)220 inline void AbstractStringValidator::setMaxLength(XMLSize_t newMaxLength)
221 {
222 fMaxLength = newMaxLength;
223 }
224
setMinLength(XMLSize_t newMinLength)225 inline void AbstractStringValidator::setMinLength(XMLSize_t newMinLength)
226 {
227 fMinLength = newMinLength;
228 }
229
setEnumeration(RefArrayVectorOf<XMLCh> * enums,bool inherited)230 inline void AbstractStringValidator::setEnumeration(RefArrayVectorOf<XMLCh>* enums
231 , bool inherited)
232 {
233 if (enums)
234 {
235 if ( !fEnumerationInherited && fEnumeration)
236 delete fEnumeration;
237
238 fEnumeration = enums;
239 fEnumerationInherited = inherited;
240 setFacetsDefined(DatatypeValidator::FACET_ENUMERATION);
241 }
242 }
243
244 XERCES_CPP_NAMESPACE_END
245
246 #endif
247
248 /**
249 * End of file AbstractStringValidator.hpp
250 */
251