source: icXML/icXML-devel/samples/src/PSVIWriter/PSVIWriterHandlers.hpp @ 3583

Last change on this file since 3583 was 3583, checked in by nmedfort, 5 years ago

more compile fixes

File size: 13.9 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#ifndef PSVIWRITERHANDLER_HPP
19#define PSVIWRITERHANDLER_HPP
20
21// ---------------------------------------------------------------------------
22//  Includes
23// ---------------------------------------------------------------------------
24#include <xercesc/sax2/Attributes.hpp>
25#include <icxercesc/sax2/DefaultHandler.hpp>
26#include <xercesc/framework/psvi/XSConstants.hpp>
27#include <xercesc/framework/psvi/PSVIHandler.hpp>
28#include <xercesc/framework/psvi/PSVIAttribute.hpp>
29#include <xercesc/framework/psvi/PSVIAttributeList.hpp>
30#include <xercesc/framework/psvi/PSVIElement.hpp>
31#include <xercesc/framework/psvi/PSVIItem.hpp>
32#include <xercesc/framework/psvi/XSAnnotation.hpp>
33#include <xercesc/framework/psvi/XSAttributeDeclaration.hpp>
34#include <xercesc/framework/psvi/XSAttributeGroupDefinition.hpp>
35#include <xercesc/framework/psvi/XSAttributeUse.hpp>
36#include <xercesc/framework/psvi/XSComplexTypeDefinition.hpp>
37#include <xercesc/framework/psvi/XSElementDeclaration.hpp>
38#include <xercesc/framework/psvi/XSFacet.hpp>
39#include <xercesc/framework/psvi/XSIDCDefinition.hpp>
40#include <xercesc/framework/psvi/XSModel.hpp>
41#include <xercesc/framework/psvi/XSModelGroup.hpp>
42#include <xercesc/framework/psvi/XSModelGroupDefinition.hpp>
43#include <xercesc/framework/psvi/XSMultiValueFacet.hpp>
44#include <xercesc/framework/psvi/XSNamedMap.hpp>
45#include <xercesc/framework/psvi/XSNamespaceItem.hpp>
46#include <xercesc/framework/psvi/XSNotationDeclaration.hpp>
47#include <xercesc/framework/psvi/XSParticle.hpp>
48#include <xercesc/framework/psvi/XSSimpleTypeDefinition.hpp>
49#include <xercesc/framework/psvi/XSTypeDefinition.hpp>
50#include <xercesc/framework/psvi/XSWildcard.hpp>
51#include <xercesc/framework/XMLFormatter.hpp>
52#include <icxercesc/framework/XMLDocumentHandler.hpp>
53#include <xercesc/dom/DOMElement.hpp>
54#include <xercesc/dom/DOMNamedNodeMap.hpp>
55#include <xercesc/util/ValueStackOf.hpp>
56#include <xercesc/util/ValueVectorOf.hpp>
57#include <xercesc/util/XMLEntityResolver.hpp>
58#include <xercesc/util/XMLResourceIdentifier.hpp>
59#include <stdlib.h>
60#include <string.h>
61
62XERCES_CPP_NAMESPACE_USE
63
64class AttrInfo {
65public:
66        AttrInfo(const XMLCh* pUri, const XMLCh* pName, const XMLCh* pType, const XMLCh* pValue) {
67                uri = XMLString::replicate(pUri);
68                name = XMLString::replicate(pName);
69                type = XMLString::replicate(pType);
70                value = XMLString::replicate(pValue);
71        }
72
73        ~AttrInfo() {
74                XMLString::release((XMLCh**)&uri);
75                XMLString::release((XMLCh**)&name);
76                XMLString::release((XMLCh**)&type);
77                XMLString::release((XMLCh**)&value);
78        }
79
80        const XMLCh* getUri() const {
81                return uri;
82        }
83
84        const XMLCh* getLocalName() const {
85                return name;
86        }
87
88        const XMLCh* getType() const {
89                return type;
90        }
91
92        const XMLCh* getValue() const {
93                return value;
94        }
95
96private:
97        const XMLCh* uri;
98        const XMLCh* name;
99        const XMLCh* type;
100        const XMLCh* value;
101};
102
103class PSVIWriterHandlers : public PSVIHandler, public DefaultHandler, public XMLEntityResolver {
104public:
105    // -----------------------------------------------------------------------
106    //  Constructors and Destructor
107    // -----------------------------------------------------------------------
108    PSVIWriterHandlers(XMLFormatter* outputFormatter, XMLFormatter* errorFormatter = NULL);
109    ~PSVIWriterHandlers();
110
111    friend class PSVIAdvancedHandler;
112    // -----------------------------------------------------------------------
113    //  Convenience Utility
114    // -----------------------------------------------------------------------
115        void resetPSVIFormatter(XMLFormatter* outputFormatter);
116    void resetDocument();
117
118    // -----------------------------------------------------------------------
119    //  Handlers for the SAX ContentHandler interface
120    // -----------------------------------------------------------------------
121    void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const Attributes& attrs);
122    void endElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);
123    void startDocument();
124    void endDocument();
125    void characters(const XMLCh* const chars, const XMLSize_t length);
126    void ignorableWhitespace(const XMLCh* const chars, const XMLSize_t length);
127    void comment(const XMLCh* const chars, const XMLSize_t length);
128    void processingInstruction(const XMLCh* const target, const XMLCh* const data);
129    void startPrefixMapping(const XMLCh* const prefix, const XMLCh* const uri);
130    void endPrefixMapping(const XMLCh* const prefix);
131    InputSource* resolveEntity(XMLResourceIdentifier* resourceIdentifier);
132    InputSource* resolveEntity(const XMLCh* const publicId, const XMLCh* const systemId);
133
134    // -----------------------------------------------------------------------
135    //  Handlers for the SAX ErrorHandler interface
136    // -----------------------------------------------------------------------
137        void warning(const SAXParseException& exc);
138    void error(const SAXParseException& exc);
139    void fatalError(const SAXParseException& exc);
140    void resetErrors();
141
142    // -----------------------------------------------------------------------
143    //  Handlers for the PSVIHandler interface
144    // -----------------------------------------------------------------------
145
146        void handleAttributesPSVI( const XMLCh* const localName,
147                                                                const XMLCh* const uri,
148                                                                PSVIAttributeList* psviAttributes );
149        void handleElementPSVI( const XMLCh* const localName,
150                                const XMLCh* const uri,
151                                PSVIElement* elementInfo );
152        void handlePartialElementPSVI( const XMLCh* const localName,
153                                   const XMLCh* const uri,
154                                   PSVIElement* elementInfo );
155private:
156    // -----------------------------------------------------------------------
157    //  Private methods
158    // -----------------------------------------------------------------------
159
160    void processAttributes(PSVIAttributeList* psviAttributes, const RefVectorOf<AttrInfo>* attributesInfo);
161    void processNamespaceAttributes(PSVIAttributeList* psviAttributes, const RefVectorOf<AttrInfo>* attributes);
162    void processAttributePSVI(PSVIAttribute* attribute);
163    void processInScopeNamespaces();
164    void processActualValue(PSVIItem*);
165    void formDateTime(XSValue*);
166
167    void processSchemaInformation(XSModel* model);
168    void processNamespaceItem(XSNamespaceItem* namespaceItem);
169    void processSchemaComponents(XSNamespaceItem* namespaceItem);
170    void processSchemaDocuments(XSNamespaceItem* namespaceItem);
171    void processSchemaAnnotations(XSAnnotationList* annotations);
172    void processSchemaErrorCode(StringList* errors);
173
174    void processTypeDefinition(XSTypeDefinition* type);
175    void processComplexTypeDefinition(XSComplexTypeDefinition* complexType);
176    void processSimpleTypeDefinition(XSSimpleTypeDefinition* simpleType);
177    void processModelGroupDefinition(XSModelGroupDefinition* modelGroup);
178    void processAttributeGroupDefinition(XSAttributeGroupDefinition* attributeGroup);
179
180    void processElementDeclaration(XSElementDeclaration* element);
181    void processAttributeDeclaration(XSAttributeDeclaration* attribute);
182    void processNotationDeclaration(XSNotationDeclaration* notation);
183
184    void processAnnotations(XSAnnotationList* annotations);
185    void processAttributeUses(XSAttributeUseList* attributeUses);
186    void processFacets(XSFacetList* facets, XSMultiValueFacetList* multiFacets);
187    void processFundamentalFacets(XSSimpleTypeDefinition* facets);
188    void processMemberTypeDefinitions(XSSimpleTypeDefinitionList* memberTypes);
189
190    void processAnnotation(XSAnnotation* annotation);
191    void processDOMElement(const XMLCh* const encloseName, DOMElement* rootElem, const XMLCh* const elementName);
192    void processDOMAttributes(DOMNamedNodeMap* attrs);
193    void processWildcard(XSWildcard* wildcard);
194    void processModelGroup(XSModelGroup* modelGroup);
195    void processParticle(XSParticle* particle);
196
197    void processAttributeWildcard(XSWildcard* wildcard);
198    void processScope(XSComplexTypeDefinition* enclosingCTD, short scope);
199    void processValueConstraint(XSConstants::VALUE_CONSTRAINT ConstraintType, const XMLCh* constraintValue);
200
201    void processIdentityConstraintDefinition(XSNamedMap<XSIDCDefinition>* identityConstraint);
202    void processFields(StringList* fields);
203    void processXPath(const XMLCh* xpath);
204
205    void processChildren();
206    void processChildrenEnd();
207
208    void processTypeDefinitionOrRef(const XMLCh* enclose, XSTypeDefinition* type);
209        void processSimpleTypeDefinitionOrRef(XSSimpleTypeDefinition* type);
210    void processAttributeDeclarationOrRef(XSAttributeDeclaration* attrDecl);
211    void processElementDeclarationOrRef(XSElementDeclaration* elemDecl);
212        void processTypeDefinitionRef(const XMLCh* enclose, XSTypeDefinition* type);
213    void processAttributeDeclarationRef(const XMLCh* enclose, XSAttributeDeclaration* attrDecl);
214    void processElementDeclarationRef(const XMLCh* enclose, XSElementDeclaration* elemDecl);
215    void sendReference(const XMLCh* elementName, XSObject* obj);
216
217    void sendElementEmpty(const XMLCh* const elementName);
218        void sendElementValueInt(const XMLCh* const elementName, int value);
219    void sendElementValue(const XMLCh* const elementName, const XMLCh* const value);
220    void sendElementValueList(const XMLCh* const elementName, const StringList* const values);
221
222        void sendIndentedElement(const XMLCh* const elementName);
223    void sendIndentedElementWithID(const XMLCh* const elementName, XSObject* obj);      //adds the ID to the attribute list before sending
224    void sendUnindentedElement(const XMLCh* const elementName);
225
226    void writeOpen(const XMLCh* const elementName);
227        void writeOpen(const XMLCh* const elementName, const StringList* const attrs);
228        void writeClose(const XMLCh* const elementName);
229        void writeValue(const XMLCh* const elementName, const XMLCh* const value);
230        void writeValue(const XMLCh* const elementName, const StringList* const values);
231        void writeEmpty(const XMLCh* const elementName, const StringList* const attrs);
232        void writeEmpty(const XMLCh* const elementName);
233    void writeString(const XMLCh* const string);
234
235    const XMLCh* translateScope(XSConstants::SCOPE scope);
236    const XMLCh* translateValueConstraint(XSConstants::VALUE_CONSTRAINT constraintKind);
237    const XMLCh* translateBlockOrFinal(short val);
238    const XMLCh* translateDerivationMethod(XSConstants::DERIVATION_TYPE derivation);
239    const XMLCh* translateProcessContents(XSWildcard::PROCESS_CONTENTS processContents);
240    const XMLCh* translateCompositor(XSModelGroup::COMPOSITOR_TYPE compositor);
241    const XMLCh* translateValidity(PSVIItem::VALIDITY_STATE validity);
242    const XMLCh* translateValidationAttempted(PSVIItem::ASSESSMENT_TYPE validation);
243    const XMLCh* translateIdConstraintCategory(XSIDCDefinition::IC_CATEGORY category);
244    const XMLCh* translateComplexContentType(XSComplexTypeDefinition::CONTENT_TYPE contentType);
245    const XMLCh* translateSimpleTypeVariety(XSSimpleTypeDefinition::VARIETY variety);
246    const XMLCh* translateOrderedFacet(XSSimpleTypeDefinition::ORDERING ordered);
247    const XMLCh* translateFacet(XSSimpleTypeDefinition::FACET facetKind);
248    const XMLCh* translateComponentType(XSConstants::COMPONENT_TYPE type);
249    const XMLCh* translateBool(bool flag);
250
251    XMLCh* createID(XSObject* obj);
252    const XMLCh* getIdName(XSObject* obj);
253    void incIndent();
254    void decIndent();
255
256protected:
257        XMLFormatter* fFormatter;
258        XMLFormatter* fErrorFormatter;
259
260        StringList* fAttrList;
261    XMLCh* fTempResult;
262    XMLCh* fIndentChars;
263    XMLCh* fBaseUri;
264
265    unsigned int fIndent;
266    unsigned int fIndentCap;
267    unsigned int fAnonNum;
268
269        RefHashTableOf<XMLCh>* fIdMap;
270    RefVectorOf<XSObject>* fDefinedIds;
271    RefArrayVectorOf<XMLCh>* fIdNames;
272    RefArrayVectorOf<XMLCh>* fObjectLocations;
273
274        RefHashTableOf<XMLCh>* fPrefixMap;
275    RefArrayVectorOf<XMLCh>* fNamespaces;
276
277        ValueVectorOf<XMLSize_t>* fNSAttributes;  //REVISIT  dont need if NSAttrs in different object
278        ValueStackOf<bool>* fElementChildren;
279
280        RefVectorOf<AttrInfo>* fAttributesInfo;
281};
282
283class PSVIAdvancedHandler: public XMLDocumentHandler {
284public:
285    PSVIAdvancedHandler(PSVIWriterHandlers* writerHandler) : XMLDocumentHandler(), fWriterHandler(writerHandler) {}
286    ~PSVIAdvancedHandler() {}
287    void docCharacters(const XMLCh* const, const XMLSize_t, const bool) {}
288    void docComment(const XMLCh* const) {}
289    void docPI(const XMLCh* const, const XMLCh* const) {}
290    void endDocument() {}
291    void endElement(const XMLElementDecl&, const unsigned int, const bool, const XMLCh* const) {}
292    void endEntityReference(const   XMLEntityDecl&) {}
293
294    void ignorableWhitespace(const XMLCh* const, const XMLSize_t, const bool) {}
295
296    void resetDocument() {}
297    void startDocument() {}
298    void startElement(const XMLElementDecl&, const unsigned int, const XMLCh* const, const RefVectorOf<XMLAttr>&
299                     ,const XMLSize_t, const bool, const bool) {}
300    void startEntityReference(const XMLEntityDecl&) {};
301
302    void XMLDecl(const XMLCh* const versionStr, const XMLCh* const encodingStr, const XMLCh* const standaloneStr, const XMLCh* const autoEncodingStr);
303   
304    virtual XERCES_CPP_NAMESPACE_QUALIFIER XMLDocumentDisseminator * createDocumentDisseminator();
305private:
306    PSVIWriterHandlers* fWriterHandler;
307};
308
309#endif
Note: See TracBrowser for help on using the repository browser.