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: XMLResourceIdentifier.hpp 527149 2007-04-10 14:56:39Z amassari $
20  */
21 
22 #if !defined(XERCESC_INCLUDE_GUARD_XMLRESOURCEIDENTIFIER_HPP)
23 #define XERCESC_INCLUDE_GUARD_XMLRESOURCEIDENTIFIER_HPP
24 
25 XERCES_CPP_NAMESPACE_BEGIN
26 
27 class Locator;
28 
29 /**
30   * <p>This class is used along with XMLEntityResolver to resolve entities.
31   * Instead of passing publicId and systemId on the resolveEntity call,
32   * as is done with the SAX entity resolver, an object of type XMLResourceIdentifier
33   * is passed.  By calling the getResourceIdentifierType() method the user can
34   * determine which data members are available for inspection:</p>
35   *
36   * <table border='1'>
37   * <tr>
38   *  <td>ResourceIdentifierType</td>
39   *  <td>Available Data Members</td>
40   * </tr>
41   * <tr>
42   *  <td>SchemaGrammar</td>
43   *  <td>schemaLocation, nameSpace & baseURI (current document)</td>
44   * </tr>
45   * <tr>
46   *  <td>SchemaImport</td>
47   *  <td>schemaLocation, nameSpace & baseURI (current document)</td>
48   * </tr>
49   * <tr>
50   *  <td>SchemaInclude</td>
51   *  <td>schemaLocation & baseURI (current document)</td>
52   * </tr>
53   * <tr>
54   *  <td>SchemaRedefine</td>
55   *  <td>schemaLocation & baseURI (current document)</td>
56   * </tr>
57   * <tr>
58   *  <td>ExternalEntity</td>
59   *  <td>systemId, publicId & baseURI (some items may be NULL)</td>
60   * </tr>
61   * </table>
62   *
63   * <p>The following resolver would provide the application
64   * with a special character stream for the entity with the system
65   * identifier "http://www.myhost.com/today":</p>
66   *
67   *<code>
68   * \#include <xercesc/util/XMLEntityResolver.hpp><br>
69   * \#include <xercesc/sax/InputSource.hpp><br>
70   *<br>
71   *&nbsp;class MyResolver : public XMLEntityResolver {<br>
72   *&nbsp;&nbsp;public:<br>
73   *&nbsp;&nbsp;&nbsp;InputSource resolveEntity (XMLResourceIdentifier* xmlri);<br>
74   *&nbsp;&nbsp;&nbsp;...<br>
75   *&nbsp;&nbsp;};<br>
76   *<br>
77   *&nbsp;&nbsp;MyResolver::resolveEntity(XMLResourceIdentifier* xmlri) {<br>
78   *&nbsp;&nbsp;&nbsp;switch(xmlri->getResourceIdentifierType()) {<br>
79   *&nbsp;&nbsp;&nbsp;&nbsp;case XMLResourceIdentifier::SystemId:<br>
80   *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (XMLString::compareString(xmlri->getSystemId(), "http://www.myhost.com/today")) {<br>
81   *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyReader* reader = new MyReader();<br>
82   *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new InputSource(reader);<br>
83   *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br>
84   *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return null;<br>
85   *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
86   *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>
87   *&nbsp;&nbsp;&nbsp;&nbsp;default:<br>
88   *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return null;<br>
89   *&nbsp;&nbsp;&nbsp;}<br>
90   *&nbsp;&nbsp;}</code>
91   *
92   * @see SAXParser#setXMLEntityResolver
93   * @see InputSource#InputSource
94   */
95 class XMLUTIL_EXPORT XMLResourceIdentifier
96 {
97 public:
98 
99     /** @name Public Constants */
100     //@{
101     enum ResourceIdentifierType {
102         SchemaGrammar = 0,
103         SchemaImport,
104         SchemaInclude,
105         SchemaRedefine ,
106         ExternalEntity,
107         UnKnown = 255
108     };
109     //@}
110 
111     /** @name Constructors and Destructor */
112     //@{
113     /** Constructor */
114 
115     XMLResourceIdentifier(const ResourceIdentifierType resourceIdentitiferType
116                             , const XMLCh* const  systemId
117                             , const XMLCh* const  nameSpace = 0
118                             , const XMLCh* const  publicId = 0
119                             , const XMLCh* const  baseURI = 0
120                             , const Locator*      locator = 0);
121 
122     /** Destructor */
~XMLResourceIdentifier()123     ~XMLResourceIdentifier()
124     {
125     }
126 
127     //@}
128 
129     // -----------------------------------------------------------------------
130     //  Getter methods
131     // -----------------------------------------------------------------------
132     /** @name Public Methods */
133     //@{
134     ResourceIdentifierType getResourceIdentifierType() const;
135     const XMLCh* getPublicId()          const;
136     const XMLCh* getSystemId()          const;
137     const XMLCh* getSchemaLocation()    const;
138     const XMLCh* getBaseURI()           const;
139     const XMLCh* getNameSpace()         const;
140     const Locator* getLocator()         const;
141     //@}
142 
143 private :
144 
145     const ResourceIdentifierType    fResourceIdentifierType;
146     const XMLCh*                    fPublicId;
147     const XMLCh*                    fSystemId;
148     const XMLCh*                    fBaseURI;
149     const XMLCh*                    fNameSpace;
150     const Locator*                  fLocator;
151 
152     /* Unimplemented constructors and operators */
153 
154     /* Copy constructor */
155     XMLResourceIdentifier(const XMLResourceIdentifier&);
156 
157     /* Assignment operator */
158     XMLResourceIdentifier& operator=(const XMLResourceIdentifier&);
159 
160 };
161 
getResourceIdentifierType() const162 inline XMLResourceIdentifier::ResourceIdentifierType XMLResourceIdentifier::getResourceIdentifierType() const
163 {
164     return fResourceIdentifierType;
165 }
166 
getPublicId() const167 inline const XMLCh* XMLResourceIdentifier::getPublicId() const
168 {
169     return fPublicId;
170 }
171 
getSystemId() const172 inline const XMLCh* XMLResourceIdentifier::getSystemId() const
173 {
174     return fSystemId;
175 }
176 
getSchemaLocation() const177 inline const XMLCh* XMLResourceIdentifier::getSchemaLocation() const
178 {
179     return fSystemId;
180 }
181 
getBaseURI() const182 inline const XMLCh* XMLResourceIdentifier::getBaseURI() const
183 {
184     return fBaseURI;
185 }
186 
getNameSpace() const187 inline const XMLCh* XMLResourceIdentifier::getNameSpace() const
188 {
189     return fNameSpace;
190 }
191 
getLocator() const192 inline const Locator* XMLResourceIdentifier::getLocator() const
193 {
194     return fLocator;
195 }
196 
XMLResourceIdentifier(const ResourceIdentifierType resourceIdentifierType,const XMLCh * const systemId,const XMLCh * const nameSpace,const XMLCh * const publicId,const XMLCh * const baseURI,const Locator * locator)197 inline XMLResourceIdentifier::XMLResourceIdentifier(const ResourceIdentifierType resourceIdentifierType
198                             , const XMLCh* const  systemId
199                             , const XMLCh* const  nameSpace
200                             , const XMLCh* const  publicId
201                             , const XMLCh* const  baseURI
202                             , const Locator*      locator )
203     : fResourceIdentifierType(resourceIdentifierType)
204     , fPublicId(publicId)
205     , fSystemId(systemId)
206     , fBaseURI(baseURI)
207     , fNameSpace(nameSpace)
208     , fLocator(locator)
209 {
210 }
211 
212 XERCES_CPP_NAMESPACE_END
213 
214 #endif
215