USGS

Isis 3.0 Object Programmers' Reference

Home

IsisXMLGroup.cpp

Go to the documentation of this file.
00001 
00024 using namespace std;
00025 
00026 #include <string>
00027 
00028 #include <xercesc/util/PlatformUtils.hpp>
00029 #include <xercesc/sax2/SAX2XMLReader.hpp>
00030 #include <xercesc/sax2/Attributes.hpp>
00031 
00032 #include "IsisXMLGroup.h"
00033 #include "IsisXMLChTrans.h"
00034 
00035 #include "IString.h"
00036 
00037 namespace XERCES = XERCES_CPP_NAMESPACE;
00038 
00039 // Constructors
00040 IsisXMLGroup::IsisXMLGroup(char *PencodingName,
00041                            bool &PexpandNamespaces,
00042                            XERCES::SAX2XMLReader* &Pparser,
00043                            IsisGroupData *Pgroup) {
00044 
00045   encodingName = PencodingName;
00046   expandNamespaces = PexpandNamespaces;
00047   parser = Pparser;
00048   group = Pgroup;
00049 
00050   prevDocHandler = parser->getContentHandler();
00051   prevErrorHandler = parser->getErrorHandler();
00052 
00053   parser->setContentHandler(this);
00054   parser->setErrorHandler(this);
00055 
00056   parameterHandler = NULL;
00057   ignoreHandler = NULL;
00058 
00059 }
00060 
00061 IsisXMLGroup::~IsisXMLGroup() {
00062 
00063   if(parameterHandler != NULL) delete parameterHandler;
00064   if(ignoreHandler != NULL) delete ignoreHandler;
00065 }
00066 
00067 
00068 //  IsisXMLGroup: Overrides of the SAX DocumentHandler interface
00069 void IsisXMLGroup::characters(const XMLCh *const chars,
00070                               const XMLSize_t length) {
00071 }
00072 
00073 
00074 void IsisXMLGroup::endElement(const XMLCh *const uri,
00075                               const XMLCh *const localname,
00076                               const XMLCh *const qname) {
00077   parser->setContentHandler(prevDocHandler);
00078   parser->setErrorHandler(prevErrorHandler);
00079 }
00080 
00081 void IsisXMLGroup::startElement(const XMLCh *const uri,
00082                                 const XMLCh *const localname,
00083                                 const XMLCh *const qname,
00084                                 const XERCES::Attributes &attributes) {
00085 
00086   if((string)XERCES::XMLString::transcode(localname) == (string)"parameter")  {
00087     if(parameterHandler != NULL) {
00088       delete parameterHandler;
00089       parameterHandler = NULL;
00090     }
00091     unsigned int index = group->parameters.size();
00092     group->parameters.resize(index + 1);
00093     QString name = XERCES::XMLString::transcode(attributes.getValue((XMLSize_t)0));
00094 // Taken out after PVL refactor      name.UpCase();
00095     group->parameters[index].name = name;
00096     parameterHandler = new IsisXMLParameter(encodingName, expandNamespaces,
00097                                             parser, &group->parameters[index]);
00098   }
00099   else {
00100     if(ignoreHandler != NULL) {
00101       delete ignoreHandler;
00102       ignoreHandler = NULL;
00103     }
00104     ignoreHandler = new IsisXMLIgnore(encodingName, expandNamespaces, parser,
00105                                       (string)XERCES::XMLString::transcode(localname));
00106   }
00107 }