Isis 3.0 Object Programmers' Reference |
Home |
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 "IString.h" 00033 00034 #include "IsisXMLParameter.h" 00035 #include "IsisXMLChTrans.h" 00036 00037 00038 // Constructors 00039 00040 IsisXMLParameter::IsisXMLParameter(char *PencodingName, 00041 bool &PexpandNamespaces, 00042 XERCES::SAX2XMLReader* &Pparser, 00043 IsisParameterData *Pparameter) { 00044 00045 encodingName = PencodingName; 00046 expandNamespaces = PexpandNamespaces; 00047 parser = Pparser; 00048 parameter = Pparameter; 00049 00050 prevDocHandler = parser->getContentHandler(); 00051 prevErrorHandler = parser->getErrorHandler(); 00052 00053 parser->setContentHandler(this); 00054 parser->setErrorHandler(this); 00055 00056 generalHandler = NULL; 00057 multipleValuesHandler = NULL; 00058 ignoreHandler = NULL; 00059 listHandler = NULL; 00060 helpersHandler = NULL; 00061 } 00062 00063 IsisXMLParameter::~IsisXMLParameter() { 00064 if(generalHandler != NULL) { 00065 delete generalHandler; 00066 generalHandler = NULL; 00067 } 00068 if(multipleValuesHandler != NULL) { 00069 delete multipleValuesHandler; 00070 multipleValuesHandler = NULL; 00071 } 00072 if(ignoreHandler != NULL) { 00073 delete ignoreHandler; 00074 ignoreHandler = NULL; 00075 } 00076 if(listHandler != NULL) { 00077 delete listHandler; 00078 listHandler = NULL; 00079 } 00080 if(helpersHandler != NULL) { 00081 delete helpersHandler; 00082 helpersHandler = NULL; 00083 } 00084 } 00085 00086 00087 // IsisXMLParameter: Overrides of the SAX DocumentHandler interface 00088 void IsisXMLParameter::characters(const XMLCh *const chars, 00089 const XMLSize_t length) {} 00090 00091 00092 void IsisXMLParameter::endElement(const XMLCh *const uri, 00093 const XMLCh *const localname, 00094 const XMLCh *const qname) { 00095 if((string)XERCES::XMLString::transcode(localname) != "list") { 00096 parser->setContentHandler(prevDocHandler); 00097 parser->setErrorHandler(prevErrorHandler); 00098 } 00099 } 00100 00101 void IsisXMLParameter::startElement(const XMLCh *const uri, 00102 const XMLCh *const localname, 00103 const XMLCh *const qname, 00104 const XERCES::Attributes &attributes) { 00105 if((string)XERCES::XMLString::transcode(localname) == (string)"type") { 00106 if(generalHandler != NULL) { 00107 delete generalHandler; 00108 generalHandler = NULL; 00109 } 00110 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, 00111 parser, ¶meter->type); 00112 } 00113 else if((string)XERCES::XMLString::transcode(localname) == (string)"brief") { 00114 if(generalHandler != NULL) { 00115 delete generalHandler; 00116 generalHandler = NULL; 00117 } 00118 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, 00119 parser, ¶meter->brief); 00120 } 00121 else if((string)XERCES::XMLString::transcode(localname) == (string)"description") { 00122 if(generalHandler != NULL) { 00123 delete generalHandler; 00124 generalHandler = NULL; 00125 } 00126 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, 00127 parser, ¶meter->description); 00128 } 00129 else if((string)XERCES::XMLString::transcode(localname) == (string)"default") { 00130 if(multipleValuesHandler != NULL) { 00131 delete multipleValuesHandler; 00132 multipleValuesHandler = NULL; 00133 } 00134 multipleValuesHandler = new IsisXMLMultipleValues(encodingName, expandNamespaces, 00135 parser, ¶meter->defaultValues); 00136 } 00137 else if((string)XERCES::XMLString::transcode(localname) == (string)"internalDefault") { 00138 if(generalHandler != NULL) { 00139 delete generalHandler; 00140 generalHandler = NULL; 00141 } 00142 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, parser, 00143 ¶meter->internalDefault); 00144 } 00145 else if((string)XERCES::XMLString::transcode(localname) == (string)"count") { 00146 if(generalHandler != NULL) { 00147 delete generalHandler; 00148 generalHandler = NULL; 00149 } 00150 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, parser, 00151 ¶meter->count); 00152 } 00153 else if((string)XERCES::XMLString::transcode(localname) == (string)"list") { 00154 } 00155 else if((string)XERCES::XMLString::transcode(localname) == (string)"option") { 00156 if(listHandler != NULL) { 00157 delete listHandler; 00158 listHandler = NULL; 00159 } 00160 unsigned int index = parameter->listOptions.size(); 00161 parameter->listOptions.resize(index + 1); 00162 QString lo = XERCES::XMLString::transcode(attributes.getValue((XMLSize_t)0)); 00163 lo = lo.toUpper(); 00164 parameter->listOptions[index].value = lo; 00165 listHandler = new IsisXMLList(encodingName, expandNamespaces, parser, 00166 ¶meter->listOptions[index]); 00167 } 00168 else if((string)XERCES::XMLString::transcode(localname) == (string)"minimum") { 00169 if(generalHandler != NULL) { 00170 delete generalHandler; 00171 generalHandler = NULL; 00172 } 00173 QString mi = XERCES::XMLString::transcode(attributes.getValue((XMLSize_t)0)); 00174 parameter->minimum_inclusive = mi.toLower(); 00175 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, 00176 parser, ¶meter->minimum); 00177 } 00178 else if((string)XERCES::XMLString::transcode(localname) == (string)"maximum") { 00179 if(generalHandler != NULL) { 00180 delete generalHandler; 00181 generalHandler = NULL; 00182 } 00183 QString mi = XERCES::XMLString::transcode(attributes.getValue((XMLSize_t)0)); 00184 parameter->maximum_inclusive = mi.toLower(); 00185 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, parser, 00186 ¶meter->maximum); 00187 } 00188 else if((string)XERCES::XMLString::transcode(localname) == (string)"greaterThan") { 00189 if(multipleValuesHandler != NULL) { 00190 delete multipleValuesHandler; 00191 multipleValuesHandler = NULL; 00192 } 00193 multipleValuesHandler = new IsisXMLMultipleValues(encodingName, expandNamespaces, 00194 parser, ¶meter->greaterThan); 00195 } 00196 else if((string)XERCES::XMLString::transcode(localname) == (string)"greaterThanOrEqual") { 00197 if(multipleValuesHandler != NULL) { 00198 delete multipleValuesHandler; 00199 multipleValuesHandler = NULL; 00200 } 00201 multipleValuesHandler = new IsisXMLMultipleValues(encodingName, expandNamespaces, 00202 parser, ¶meter->greaterThanOrEqual); 00203 } 00204 else if((string)XERCES::XMLString::transcode(localname) == (string)"lessThan") { 00205 if(multipleValuesHandler != NULL) { 00206 delete multipleValuesHandler; 00207 multipleValuesHandler = NULL; 00208 } 00209 multipleValuesHandler = new IsisXMLMultipleValues(encodingName, expandNamespaces, 00210 parser, ¶meter->lessThan); 00211 } 00212 else if((string)XERCES::XMLString::transcode(localname) == (string)"lessThanOrEqual") { 00213 if(multipleValuesHandler != NULL) { 00214 delete multipleValuesHandler; 00215 multipleValuesHandler = NULL; 00216 } 00217 multipleValuesHandler = new IsisXMLMultipleValues(encodingName, expandNamespaces, 00218 parser, ¶meter->lessThanOrEqual); 00219 } 00220 else if((string)XERCES::XMLString::transcode(localname) == (string)"notEqual") { 00221 if(multipleValuesHandler != NULL) { 00222 delete multipleValuesHandler; 00223 multipleValuesHandler = NULL; 00224 } 00225 multipleValuesHandler = new IsisXMLMultipleValues(encodingName, expandNamespaces, 00226 parser, ¶meter->notEqual); 00227 } 00228 else if((string)XERCES::XMLString::transcode(localname) == (string)"odd") { 00229 if(generalHandler != NULL) { 00230 delete generalHandler; 00231 generalHandler = NULL; 00232 } 00233 parameter->odd = "TRUE"; 00234 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, parser); 00235 00236 } 00237 else if((string)XERCES::XMLString::transcode(localname) == (string)"exclusions") { 00238 if(multipleValuesHandler != NULL) { 00239 delete multipleValuesHandler; 00240 multipleValuesHandler = NULL; 00241 } 00242 multipleValuesHandler = new IsisXMLMultipleValues(encodingName, expandNamespaces, 00243 parser, ¶meter->exclude); 00244 } 00245 else if((string)XERCES::XMLString::transcode(localname) == (string)"inclusions") { 00246 if(multipleValuesHandler != NULL) { 00247 delete multipleValuesHandler; 00248 multipleValuesHandler = NULL; 00249 } 00250 multipleValuesHandler = new IsisXMLMultipleValues(encodingName, expandNamespaces, 00251 parser, ¶meter->include); 00252 } 00253 else if((string)XERCES::XMLString::transcode(localname) == (string)"filter") { 00254 if(generalHandler != NULL) { 00255 delete generalHandler; 00256 generalHandler = NULL; 00257 } 00258 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, parser, ¶meter->filter); 00259 } 00260 else if((string)XERCES::XMLString::transcode(localname) == (string)"defaultPath") { 00261 if(generalHandler != NULL) { 00262 delete generalHandler; 00263 generalHandler = NULL; 00264 } 00265 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, parser, 00266 ¶meter->path); 00267 } 00268 else if((string)XERCES::XMLString::transcode(localname) == (string)"fileMode") { 00269 if(generalHandler != NULL) { 00270 delete generalHandler; 00271 generalHandler = NULL; 00272 } 00273 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, parser, ¶meter->fileMode); 00274 } 00275 else if((string)XERCES::XMLString::transcode(localname) == (string)"pixelType") { 00276 if(generalHandler != NULL) { 00277 delete generalHandler; 00278 generalHandler = NULL; 00279 } 00280 generalHandler = new IsisXMLHandler(encodingName, expandNamespaces, parser, ¶meter->pixelType); 00281 } 00282 else if((string)XERCES::XMLString::transcode(localname) == (string)"helpers") { 00283 if(helpersHandler != NULL) { 00284 delete helpersHandler; 00285 helpersHandler = NULL; 00286 } 00287 helpersHandler = new IsisXMLHelpers(encodingName, expandNamespaces, parser, 00288 ¶meter->helpers); 00289 } 00290 else { 00291 if(ignoreHandler != NULL) { 00292 delete ignoreHandler; 00293 ignoreHandler = NULL; 00294 } 00295 ignoreHandler = new IsisXMLIgnore(encodingName, expandNamespaces, parser, 00296 (string)XERCES::XMLString::transcode(localname)); 00297 } 00298 } 00299 00300 00301 00302