source: icXML/icXML-devel/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp @ 2722

Last change on this file since 2722 was 2722, checked in by cameron, 6 years ago

Original Xerces files with import mods for icxercesc

File size: 5.5 KB
Line 
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: NOTATIONDatatypeValidator.cpp 676911 2008-07-15 13:27:32Z amassari $
20 */
21
22// ---------------------------------------------------------------------------
23//  Includes
24// ---------------------------------------------------------------------------
25#include <xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp>
26#include <xercesc/util/XMLUri.hpp>
27#include <xercesc/validators/datatype/InvalidDatatypeFacetException.hpp>
28#include <xercesc/validators/datatype/InvalidDatatypeValueException.hpp>
29#include <xercesc/util/OutOfMemoryException.hpp>
30
31XERCES_CPP_NAMESPACE_BEGIN
32
33// ---------------------------------------------------------------------------
34//  Constructors and Destructor
35// ---------------------------------------------------------------------------
36NOTATIONDatatypeValidator::NOTATIONDatatypeValidator(MemoryManager* const manager)
37:AbstractStringValidator(0, 0, 0, DatatypeValidator::NOTATION, manager)
38{}
39
40NOTATIONDatatypeValidator::~NOTATIONDatatypeValidator()
41{}
42
43NOTATIONDatatypeValidator::NOTATIONDatatypeValidator(
44                          DatatypeValidator*            const baseValidator
45                        , RefHashTableOf<KVStringPair>* const facets
46                        , RefArrayVectorOf<XMLCh>*           const enums
47                        , const int                           finalSet
48                        , MemoryManager* const manager)
49:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::NOTATION, manager)
50{
51    init(enums, manager);
52}
53
54DatatypeValidator* NOTATIONDatatypeValidator::newInstance
55(
56      RefHashTableOf<KVStringPair>* const facets
57    , RefArrayVectorOf<XMLCh>* const      enums
58    , const int                           finalSet
59    , MemoryManager* const                manager
60)
61{
62    return (DatatypeValidator*) new (manager) NOTATIONDatatypeValidator(this, facets, enums, finalSet, manager);
63}
64
65// ---------------------------------------------------------------------------
66//  Utilities
67// ---------------------------------------------------------------------------
68
69void NOTATIONDatatypeValidator::checkValueSpace(const XMLCh* const content
70                                                , MemoryManager* const manager)
71{
72
73    if (!XMLString::isValidNOTATION(content, manager))
74    {
75        ThrowXMLwithMemMgr1(InvalidDatatypeValueException
76                , XMLExcepts::VALUE_NOTATION_Invalid
77                , content
78                , manager);
79    }
80
81}
82
83void NOTATIONDatatypeValidator::checkContent( const XMLCh*             const content
84                                          ,       ValidationContext* const context
85                                          ,       bool                     asBase
86                                          ,       MemoryManager*     const manager
87                                          )
88{
89
90    //validate against base validator if any
91    NOTATIONDatatypeValidator *pBaseValidator = (NOTATIONDatatypeValidator*) this->getBaseValidator();
92    if (pBaseValidator)
93        pBaseValidator->checkContent(content, context, true, manager);
94
95    int thisFacetsDefined = getFacetsDefined();
96
97    // we check pattern first
98    if ( (thisFacetsDefined & DatatypeValidator::FACET_PATTERN ) != 0 )
99    {
100        if (getRegex()->matches(content, manager) ==false)
101        {
102            ThrowXMLwithMemMgr2(InvalidDatatypeValueException
103                    , XMLExcepts::VALUE_NotMatch_Pattern
104                    , content
105                    , getPattern()
106                    , manager);
107        }
108    }
109
110    // if this is a base validator, we only need to check pattern facet
111    // all other facet were inherited by the derived type
112    if (asBase)
113        return;
114
115    checkValueSpace(content, manager);
116
117    if ((thisFacetsDefined & DatatypeValidator::FACET_ENUMERATION) != 0 &&
118        (getEnumeration() != 0))
119    {
120        XMLCh* normContent = XMLString::replicate(content, manager);
121        ArrayJanitor<XMLCh>  jan(normContent, manager);
122        normalizeContent(normContent, manager);
123
124        XMLSize_t i=0;
125        XMLSize_t enumLength = getEnumeration()->size();
126        for ( ; i < enumLength; i++)
127        {
128            if (XMLString::equals(normContent, getEnumeration()->elementAt(i)))
129                break;
130        }
131
132        if (i == enumLength)
133            ThrowXMLwithMemMgr1(InvalidDatatypeValueException, XMLExcepts::VALUE_NotIn_Enumeration, content, manager);
134    }
135
136    checkAdditionalFacet(content, manager);
137}
138
139/***
140 * Support for Serialization/De-serialization
141 ***/
142
143IMPL_XSERIALIZABLE_TOCREATE(NOTATIONDatatypeValidator)
144
145void NOTATIONDatatypeValidator::serialize(XSerializeEngine& serEng)
146{
147    AbstractStringValidator::serialize(serEng);
148}
149
150XERCES_CPP_NAMESPACE_END
151
152/**
153  * End of file NOTATIONDatatypeValidator.cpp
154  */
Note: See TracBrowser for help on using the repository browser.