source: NonGTP/Xerces/xercesc/framework/psvi/XSAttributeDeclaration.hpp @ 188

Revision 188, 9.6 KB checked in by mattausch, 19 years ago (diff)

added xercesc to support

Line 
1/*
2 * The Apache Software License, Version 1.1
3 *
4 * Copyright (c) 2003 The Apache Software Foundation.  All rights
5 * reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 *
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in
16 *    the documentation and/or other materials provided with the
17 *    distribution.
18 *
19 * 3. The end-user documentation included with the redistribution,
20 *    if any, must include the following acknowledgment:
21 *       "This product includes software developed by the
22 *        Apache Software Foundation (http://www.apache.org/)."
23 *    Alternately, this acknowledgment may appear in the software itself,
24 *    if and wherever such third-party acknowledgments normally appear.
25 *
26 * 4. The names "Xerces" and "Apache Software Foundation" must
27 *    not be used to endorse or promote products derived from this
28 *    software without prior written permission. For written
29 *    permission, please contact apache\@apache.org.
30 *
31 * 5. Products derived from this software may not be called "Apache",
32 *    nor may "Apache" appear in their name, without prior written
33 *    permission of the Apache Software Foundation.
34 *
35 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46 * SUCH DAMAGE.
47 * ====================================================================
48 *
49 * This software consists of voluntary contributions made by many
50 * individuals on behalf of the Apache Software Foundation, and was
51 * originally based on software copyright (c) 1999, International
52 * Business Machines, Inc., http://www.ibm.com .  For more information
53 * on the Apache Software Foundation, please see
54 * <http://www.apache.org/>.
55 */
56
57/*
58 * $Log: XSAttributeDeclaration.hpp,v $
59 * Revision 1.8  2003/12/24 17:42:02  knoaman
60 * Misc. PSVI updates
61 *
62 * Revision 1.7  2003/12/01 23:23:26  neilg
63 * fix for bug 25118; thanks to Jeroen Witmond
64 *
65 * Revision 1.6  2003/11/21 22:34:45  neilg
66 * More schema component model implementation, thanks to David Cargill.
67 * In particular, this cleans up and completes the XSModel, XSNamespaceItem,
68 * XSAttributeDeclaration and XSAttributeGroup implementations.
69 *
70 * Revision 1.5  2003/11/21 17:19:30  knoaman
71 * PSVI update.
72 *
73 * Revision 1.4  2003/11/14 22:47:53  neilg
74 * fix bogus log message from previous commit...
75 *
76 * Revision 1.3  2003/11/14 22:33:30  neilg
77 * Second phase of schema component model implementation. 
78 * Implement XSModel, XSNamespaceItem, and the plumbing necessary
79 * to connect them to the other components.
80 * Thanks to David Cargill.
81 *
82 * Revision 1.2  2003/11/06 15:30:04  neilg
83 * first part of PSVI/schema component model implementation, thanks to David Cargill.  This covers setting the PSVIHandler on parser objects, as well as implementing XSNotation, XSSimpleTypeDefinition, XSIDCDefinition, and most of XSWildcard, XSComplexTypeDefinition, XSElementDeclaration, XSAttributeDeclaration and XSAttributeUse.
84 *
85 * Revision 1.1  2003/09/16 14:33:36  neilg
86 * PSVI/schema component model classes, with Makefile/configuration changes necessary to build them
87 *
88 */
89
90#if !defined(XSATTRIBUTEDECLARATION_HPP)
91#define XSATTRIBUTEDECLARATION_HPP
92
93#include <xercesc/framework/psvi/XSObject.hpp>
94
95XERCES_CPP_NAMESPACE_BEGIN
96
97/**
98 * This class describes all properties of a Schema Attribute
99 * Declaration component.
100 * This is *always* owned by the validator /parser object from which
101 * it is obtained. 
102 */
103
104// forward declarations
105class XSAnnotation;
106class XSComplexTypeDefinition;
107class XSSimpleTypeDefinition;
108class SchemaAttDef;
109
110class XMLPARSER_EXPORT XSAttributeDeclaration : public XSObject
111{
112public:
113
114    //  Constructors and Destructor
115    // -----------------------------------------------------------------------
116    /** @name Constructors */
117    //@{
118
119    /**
120      * The default constructor
121      *
122      * @param  attDef     
123      * @param  typeDef     
124      * @param  annot       
125      * @param  xsModel     
126      * @param  scope       
127      * @param  enclosingCTDefinition
128      * @param  manager     The configurable memory manager
129      */
130    XSAttributeDeclaration
131    (
132        SchemaAttDef* const             attDef
133        , XSSimpleTypeDefinition* const typeDef
134        , XSAnnotation* const           annot
135        , XSModel* const                xsModel
136        , XSConstants::SCOPE            scope
137        , XSComplexTypeDefinition*      enclosingCTDefinition
138        , MemoryManager* const          manager = XMLPlatformUtils::fgMemoryManager
139    );
140
141    //@};
142
143    /** @name Destructor */
144    //@{
145    ~XSAttributeDeclaration();
146    //@}
147
148    //---------------------
149    /** @name overridden XSObject methods */
150
151    //@{
152
153    /**
154     * The name of type <code>NCName</code> of this declaration as defined in
155     * XML Namespaces.
156     */
157    const XMLCh* getName();
158
159    /**
160     *  The [target namespace] of this object, or <code>null</code> if it is
161     * unspecified.
162     */
163    const XMLCh* getNamespace();
164
165    /**
166     * A namespace schema information item corresponding to the target
167     * namespace of the component, if it's globally declared; or null
168     * otherwise.
169     */
170    XSNamespaceItem* getNamespaceItem();
171
172    /**
173      * Return a unique identifier for a component within this XSModel, to
174      * optimize querying.
175      * @return id unique for this type of component within this XSModel.
176      */
177    unsigned int getId() const;
178
179    //@}
180
181    /** @name XSAttributeDeclaration methods **/
182
183    //@{
184
185    /**
186     * [type definition]: A simple type definition
187     */
188    XSSimpleTypeDefinition *getTypeDefinition() const;
189
190    /**
191     * Optional. One of <code>SCOPE_GLOBAL</code>, <code>SCOPE_LOCAL</code>,
192     * or <code>SCOPE_ABSENT</code>. If the scope is local, then the
193     * <code>enclosingCTDefinition</code> is present.
194     */
195    XSConstants::SCOPE getScope() const;
196
197    /**
198     * The complex type definition for locally scoped declarations (see
199     * <code>scope</code>).
200     */
201    XSComplexTypeDefinition *getEnclosingCTDefinition();
202
203    /**
204     * Value constraint: one of <code>VC_NONE, VC_DEFAULT, VC_FIXED</code>.
205     */
206    XSConstants::VALUE_CONSTRAINT getConstraintType() const;
207
208    /**
209     * Value constraint: The actual value with respect to the [type definition
210     * ].
211     */
212    const XMLCh *getConstraintValue();
213
214    /**
215     * Optional. Annotation.
216     */
217    XSAnnotation *getAnnotation() const;
218
219    //@}
220
221    //----------------------------------
222    /** methods needed by implementation */
223
224    //@{
225    /**
226      * Set the id to be returned on getId().
227      */
228    void setId(unsigned int id);
229
230    bool getRequired() const;
231    //@}
232
233private:
234
235    void setEnclosingCTDefinition(XSComplexTypeDefinition* const toSet);
236    friend class XSObjectFactory;
237
238    // -----------------------------------------------------------------------
239    //  Unimplemented constructors and operators
240    // -----------------------------------------------------------------------
241    XSAttributeDeclaration(const XSAttributeDeclaration&);
242    XSAttributeDeclaration & operator=(const XSAttributeDeclaration &);
243
244protected:
245
246    // -----------------------------------------------------------------------
247    //  data members
248    // -----------------------------------------------------------------------
249    SchemaAttDef*               fAttDef;
250    XSSimpleTypeDefinition*     fTypeDefinition;
251    XSAnnotation*               fAnnotation;
252    unsigned int                fId;
253    XSConstants::SCOPE          fScope;
254    XSComplexTypeDefinition*    fEnclosingCTDefinition;
255};
256
257// ---------------------------------------------------------------------------
258//  XSAttributeDeclaration: inline methods
259// ---------------------------------------------------------------------------
260inline XSSimpleTypeDefinition* XSAttributeDeclaration::getTypeDefinition() const
261{
262    return fTypeDefinition;
263}
264
265inline void XSAttributeDeclaration::setId(unsigned int id)
266{
267    fId = id;
268}
269
270inline XSAnnotation *XSAttributeDeclaration::getAnnotation() const
271{
272    return fAnnotation;
273}
274
275inline XSConstants::SCOPE XSAttributeDeclaration::getScope() const
276{   
277    return fScope;
278}
279
280inline XSComplexTypeDefinition *XSAttributeDeclaration::getEnclosingCTDefinition()
281{
282    return fEnclosingCTDefinition;
283}
284
285inline void XSAttributeDeclaration::setEnclosingCTDefinition
286(
287    XSComplexTypeDefinition* const toSet
288)
289{
290    fEnclosingCTDefinition = toSet;
291}
292
293XERCES_CPP_NAMESPACE_END
294
295#endif
Note: See TracBrowser for help on using the repository browser.