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: AbstractNumericFacetValidator.hpp 673155 2008-07-01 17:55:39Z dbertoni $
20  */
21 
22 #if !defined(XERCESC_INCLUDE_GUARD_ABSTRACT_NUMERIC_FACET_VALIDATOR_HPP)
23 #define XERCESC_INCLUDE_GUARD_ABSTRACT_NUMERIC_FACET_VALIDATOR_HPP
24 
25 #include <xercesc/validators/datatype/DatatypeValidator.hpp>
26 #include <xercesc/util/RefArrayVectorOf.hpp>
27 #include <xercesc/util/XMLNumber.hpp>
28 
29 XERCES_CPP_NAMESPACE_BEGIN
30 
31 class VALIDATORS_EXPORT AbstractNumericFacetValidator : public DatatypeValidator
32 {
33 public:
34 
35     // -----------------------------------------------------------------------
36     //  Public ctor/dtor
37     // -----------------------------------------------------------------------
38 	/** @name Constructor. */
39     //@{
40 
41     virtual ~AbstractNumericFacetValidator();
42 
43 	//@}
44 
45 	virtual const RefArrayVectorOf<XMLCh>* getEnumString() const;
46 
47     /***
48      * Support for Serialization/De-serialization
49      ***/
50     DECL_XSERIALIZABLE(AbstractNumericFacetValidator)
51 
52 protected:
53 
54     AbstractNumericFacetValidator
55     (
56         DatatypeValidator* const baseValidator
57         , RefHashTableOf<KVStringPair>* const facets
58         , const int finalSet
59         , const ValidatorType type
60         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
61     );
62 
63     void init(RefArrayVectorOf<XMLCh>*  const enums
64         , MemoryManager* const manager);
65 
66     //
67     // Abstract interface
68     //
69     virtual void assignAdditionalFacet(const XMLCh* const key
70                                      , const XMLCh* const value
71                                      , MemoryManager* const manager);
72 
73     virtual void inheritAdditionalFacet();
74 
75     virtual void checkAdditionalFacetConstraints(MemoryManager* const manager) const;
76 
77     virtual void checkAdditionalFacetConstraintsBase(MemoryManager* const manager) const;
78 
79     virtual int  compareValues(const XMLNumber* const lValue
80                              , const XMLNumber* const rValue) = 0;
81 
82     virtual void checkContent(const XMLCh*             const content
83                             ,       ValidationContext* const context
84                             , bool                           asBase
85                             ,       MemoryManager*     const manager) = 0;
86 
87 // -----------------------------------------------------------------------
88 // Setter methods
89 // -----------------------------------------------------------------------
90 
91     virtual void  setMaxInclusive(const XMLCh* const) = 0;
92 
93     virtual void  setMaxExclusive(const XMLCh* const) = 0;
94 
95     virtual void  setMinInclusive(const XMLCh* const) = 0;
96 
97     virtual void  setMinExclusive(const XMLCh* const) = 0;
98 
99     virtual void  setEnumeration(MemoryManager* const manager) = 0;
100 
101     static const int INDETERMINATE;
102 
103 public:
104 // -----------------------------------------------------------------------
105 // Getter methods
106 // -----------------------------------------------------------------------
107 
108     inline XMLNumber*                  getMaxInclusive() const;
109 
110     inline XMLNumber*                  getMaxExclusive() const;
111 
112     inline XMLNumber*                  getMinInclusive() const;
113 
114     inline XMLNumber*                  getMinExclusive() const;
115 
116     inline RefVectorOf<XMLNumber>*     getEnumeration() const;
117 
118 protected:
119     // -----------------------------------------------------------------------
120     //  Protected data members
121     //
122     //      Allow access to derived class
123     //
124     // -----------------------------------------------------------------------
125     bool                     fMaxInclusiveInherited;
126     bool                     fMaxExclusiveInherited;
127     bool                     fMinInclusiveInherited;
128     bool                     fMinExclusiveInherited;
129     bool                     fEnumerationInherited;
130 
131     XMLNumber*               fMaxInclusive;
132     XMLNumber*               fMaxExclusive;
133     XMLNumber*               fMinInclusive;
134     XMLNumber*               fMinExclusive;
135 
136     RefVectorOf<XMLNumber>*  fEnumeration;    // save the actual value
137     RefArrayVectorOf<XMLCh>*      fStrEnumeration;
138 
139 private:
140 
141     void assignFacet(MemoryManager* const manager);
142 
143     void inspectFacet(MemoryManager* const manager);
144 
145     void inspectFacetBase(MemoryManager* const manager);
146 
147     void inheritFacet();
148 
149     void storeClusive(XSerializeEngine&
150                     , bool
151                     , XMLNumber*);
152 
153     void loadClusive(XSerializeEngine&
154                    , bool&
155                    , XMLNumber*&
156                    , XMLNumber::NumberType
157                    , int );
158 
159     // -----------------------------------------------------------------------
160     //  Unimplemented constructors and operators
161     // -----------------------------------------------------------------------
162     AbstractNumericFacetValidator(const AbstractNumericFacetValidator&);
163     AbstractNumericFacetValidator& operator=(const AbstractNumericFacetValidator&);
164 };
165 
166 // -----------------------------------------------------------------------
167 // Getter methods
168 // -----------------------------------------------------------------------
169 
getMaxInclusive() const170 inline XMLNumber* AbstractNumericFacetValidator::getMaxInclusive() const
171 {
172     return fMaxInclusive;
173 }
174 
getMaxExclusive() const175 inline XMLNumber* AbstractNumericFacetValidator::getMaxExclusive() const
176 {
177     return fMaxExclusive;
178 }
179 
getMinInclusive() const180 inline XMLNumber* AbstractNumericFacetValidator::getMinInclusive() const
181 {
182     return fMinInclusive;
183 }
184 
getMinExclusive() const185 inline XMLNumber* AbstractNumericFacetValidator::getMinExclusive() const
186 {
187     return fMinExclusive;
188 }
189 
getEnumeration() const190 inline RefVectorOf<XMLNumber>* AbstractNumericFacetValidator::getEnumeration() const
191 {
192     return fEnumeration;
193 }
194 
195 XERCES_CPP_NAMESPACE_END
196 
197 #endif
198 
199 /**
200   * End of file AbstractNumericFacetValidator.hpp
201   */
202