XMLTool Class Reference

#include <XMLTool.hh>

Collaboration diagram for XMLTool:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 XMLTool ()
 ~XMLTool ()
int parse (SteerDesc &_steerDesc, string _xmlFileName)
void receiveEvent (string balise, const map< string, string > &key_value) const

Private Attributes

string xmlFileName
SteerDescsteerDesc

Detailed Description

Definition at line 166 of file XMLTool.hh.


Constructor & Destructor Documentation

XMLTool::XMLTool (  ) 

Definition at line 258 of file XMLTool.cpp.

00258                 :steerDesc(NULL)
00259 
00260 {
00261 }

XMLTool::~XMLTool (  )  [inline]

Definition at line 170 of file XMLTool.hh.

00170 {};


Member Function Documentation

int XMLTool::parse ( SteerDesc _steerDesc,
string  _xmlFileName 
)

Definition at line 264 of file XMLTool.cpp.

Referenced by Toolbox::getDetector(), and main().

00265 {
00266 
00267 steerDesc =  &aSteerDesc;
00268 
00269 if ( steerDesc != NULL )
00270 {
00271 xmlFileName = aXmlFileName;
00272 
00273 
00274 bool                     doNamespaces        = false;
00275 bool                     doSchema            = false;
00276 bool                     schemaFullChecking  = false;
00277 const char*              encodingName    = "LATIN1";
00278 XMLFormatter::UnRepFlags unRepFlags      = XMLFormatter::UnRep_CharRef;
00279 const char*                    xmlFile         = 0;
00280 SAXParser::ValSchemes    valScheme       = SAXParser::Val_Auto;
00281 
00282 
00283     // Initialize the XML4C2 system
00284     try
00285     {
00286          XMLPlatformUtils::Initialize();
00287     }
00288 
00289     catch (const XMLException& toCatch)
00290     {
00291          XERCES_STD_QUALIFIER cerr << "Error during initialization! :\n"
00292               << StrX(toCatch.getMessage()) << XERCES_STD_QUALIFIER endl;
00293          return 1;
00294     }
00295 
00296     xmlFile = xmlFileName.data() ;
00297     int errorCount = 0;
00298 
00299     //
00300     //  Create a SAX parser object. Then, according to what we were told on
00301     //  the command line, set it to validate or not.
00302     //
00303     SAXParser* parser = new SAXParser;
00304     parser->setValidationScheme(valScheme);
00305     parser->setDoNamespaces(doNamespaces);
00306     parser->setDoSchema(doSchema);
00307     parser->setValidationSchemaFullChecking(schemaFullChecking);
00308 
00309     //
00310     //  Create the handler object and install it as the document and error
00311     //  handler for the parser-> Then parse the file and catch any exceptions
00312     //  that propogate out
00313     //
00314     int errorCode = 0;
00315     try
00316     {
00317         XMLHandlers handler(*this, encodingName, unRepFlags);
00318         parser->setDocumentHandler(&handler);
00319         parser->setErrorHandler(&handler);
00320         parser->parse(xmlFile);
00321         errorCount = parser->getErrorCount();
00322     }
00323     catch (const OutOfMemoryException&)
00324     {
00325         XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER endl;
00326         errorCode = 5;
00327     }
00328     catch (const XMLException& toCatch)
00329     {
00330         XERCES_STD_QUALIFIER cerr << "\nAn error occurred\n  Error: "
00331              << StrX(toCatch.getMessage())
00332              << "\n" << XERCES_STD_QUALIFIER endl;
00333         errorCode = 4;
00334     }
00335     if(errorCode) {
00336         XMLPlatformUtils::Terminate();
00337         return errorCode;
00338     }
00339 
00340     //
00341     //  Delete the parser itself.  Must be done prior to calling Terminate, below.
00342     //
00343     delete parser;
00344 
00345     // And call the termination method
00346     XMLPlatformUtils::Terminate();
00347 
00348     if (errorCount > 0)
00349         return 4;
00350     else
00351   {
00352           return 0;
00353 }
00354 }
00355 else { return 4; }
00356 }

void XMLTool::receiveEvent ( string  balise,
const map< string, string > &  key_value 
) const

Definition at line 360 of file XMLTool.cpp.

Referenced by XMLHandlers::startElement().

00361 {
00362   string key,value;
00363   map<string, string>::const_iterator iter;
00364 
00365 //cout << "balise[" << balise <<"]" <<endl;
00366 
00367   for (iter=key_value.begin(); iter != key_value.end(); ++iter)
00368   {
00369     key = iter->first;
00370     value = iter->second;
00371 
00372 //cout << "key[" << key <<"]" <<endl;
00373 //cout << "value[" << value <<"]" <<endl;
00374 
00375 
00376     //Info
00377     if ( !balise.compare(INFOR) && !key.compare(DATE) )
00378     {
00379       steerDesc->date = value;
00380     }
00381     // uRun
00382 
00383 // Monitoring dif 
00384     else if (  !balise.compare(MONDIF) && !key.compare(ID) )
00385     {
00386       int id = atoi(value.c_str());
00387       steerDesc->monitoringDif = atoi(value.c_str());
00388     }
00389     //slow control file
00390     else if (  !balise.compare(SLOWCONTROL) && !key.compare(PATH) )
00391     {
00392       steerDesc->slowControl = value;
00393     }
00394 
00395     //input file
00396     else if (  !balise.compare(INPUT) && !key.compare(PATH) )
00397     {
00398       steerDesc->inputInfo = new input_info_t();
00399       steerDesc->inputInfo->path = value;
00400     }
00401     else if (  !balise.compare(INPUT) && !key.compare(TYPE) )
00402     {
00403       if ( steerDesc->inputInfo != NULL )
00404       {
00405         steerDesc->inputInfo->type = value;
00406       }
00407     }
00408 
00409     else if (  !balise.compare(INPUT) && !key.compare(RUNID) )
00410     {
00411       if ( steerDesc->inputInfo != NULL )
00412       {
00413         steerDesc->inputInfo->runId = atoi(value.c_str());
00414       }
00415     }
00416 
00417     // output file
00418     else if (  !balise.compare(OUTPUT) && !key.compare(PATH) )
00419     {
00420       steerDesc->outputFile = value;
00421     }
00422     //detector name and description
00423     else if (  !balise.compare(DETECTOR) && !key.compare(NAME) )
00424     {
00425       steerDesc->detectorName = value;
00426     }
00427     else if (  !balise.compare(DETECTOR) && !key.compare(DESCRIPTION) )
00428     {
00429       steerDesc->detectorDescription = value;
00430     }
00431 
00432     // Chamber type and z position
00433     else if (  !balise.compare(CHAMBER) && !key.compare(TYPE) )
00434     {
00435       if ( steerDesc->chamberInfo == NULL )  
00436                         {
00437                                         steerDesc->chamberInfo = new chamber_info_t();
00438                                         steerDesc->chamberInfo->xRotation = false;
00439                                         steerDesc->chamberInfo->yRotation = false;
00440                                         steerDesc->chamberInfo->zRotation = 0;
00441                                         steerDesc->chamberInfo->stripHorizontal = false;
00442                                         steerDesc->chamberInfo->unit = "cm" ;
00443                         }
00444       steerDesc->chamberInfo->type = value;
00445     }
00446     else if (  !balise.compare(CHAMBER) && !key.compare(XPOS) )
00447     {
00448       if ( steerDesc->chamberInfo == NULL )
00449                         {
00450                                         steerDesc->chamberInfo = new chamber_info_t();
00451                                         steerDesc->chamberInfo->xRotation = false;
00452                                         steerDesc->chamberInfo->yRotation = false;
00453                                         steerDesc->chamberInfo->zRotation = 0;
00454                                         steerDesc->chamberInfo->stripHorizontal = false;
00455           steerDesc->chamberInfo->unit = "cm" ;
00456                         }
00457       steerDesc->chamberInfo->xPos = atof(value.c_str());
00458 //                      cout << "XMLTool xPos[" << steerDesc->chamberInfo->xPos <<"]" << endl;
00459     }
00460     else if (  !balise.compare(CHAMBER) && !key.compare(YPOS) )
00461     {
00462       if ( steerDesc->chamberInfo == NULL )
00463                         {
00464                                         steerDesc->chamberInfo = new chamber_info_t();
00465                                         steerDesc->chamberInfo->xRotation = false;
00466                                         steerDesc->chamberInfo->yRotation = false;
00467                                         steerDesc->chamberInfo->zRotation = 0;
00468                                         steerDesc->chamberInfo->stripHorizontal = false;
00469           steerDesc->chamberInfo->unit = "cm" ;
00470                         }
00471       steerDesc->chamberInfo->yPos = atof(value.c_str());
00472         //              cout << "y  atof(value.c_str()[" <<  atof(value.c_str()) << "]" <<endl;
00473 //                      cout << "XMLTool yPos[" << steerDesc->chamberInfo->yPos <<"]" << endl;
00474     }
00475     else if (  !balise.compare(CHAMBER) && !key.compare(ZPOS) )
00476     {
00477       if ( steerDesc->chamberInfo == NULL )
00478                         {
00479                                         steerDesc->chamberInfo = new chamber_info_t();
00480                                         steerDesc->chamberInfo->xRotation = false;
00481                                         steerDesc->chamberInfo->yRotation = false;
00482                                         steerDesc->chamberInfo->zRotation = 0;
00483                                         steerDesc->chamberInfo->stripHorizontal = false;
00484           steerDesc->chamberInfo->unit = "cm" ;
00485                         }
00486       steerDesc->chamberInfo->zPos = atof(value.c_str());
00487     }
00488     else if (  !balise.compare(CHAMBER) && !key.compare(XROTATION) )
00489     {
00490       if ( steerDesc->chamberInfo == NULL )
00491                         {
00492                                         steerDesc->chamberInfo = new chamber_info_t();
00493                                         steerDesc->chamberInfo->xRotation = false;
00494                                         steerDesc->chamberInfo->yRotation = false;
00495                                         steerDesc->chamberInfo->zRotation = 0;
00496                                         steerDesc->chamberInfo->stripHorizontal = false;
00497           steerDesc->chamberInfo->unit = "cm" ;
00498                         }
00499                         if ( !value.compare("true") || !value.compare("TRUE") )
00500                         {
00501           steerDesc->chamberInfo->xRotation = true;
00502                         }
00503     }
00504     else if (  !balise.compare(CHAMBER) && !key.compare(YROTATION) )
00505     {
00506       if ( steerDesc->chamberInfo == NULL )
00507                         {
00508                                         steerDesc->chamberInfo = new chamber_info_t();
00509                                         steerDesc->chamberInfo->xRotation = false;
00510                                         steerDesc->chamberInfo->yRotation = false;
00511                                         steerDesc->chamberInfo->zRotation = 0;
00512                                         steerDesc->chamberInfo->stripHorizontal = false;
00513           steerDesc->chamberInfo->unit = "cm" ;
00514                         }
00515                         if ( !value.compare("true") || !value.compare("TRUE") )
00516                         {
00517           steerDesc->chamberInfo->yRotation = true;
00518                         }
00519     }
00520 
00521   else if (  !balise.compare(CHAMBER) && !key.compare(ZROTATION) )
00522     {
00523       if ( steerDesc->chamberInfo == NULL )
00524       {
00525           steerDesc->chamberInfo = new chamber_info_t();
00526           steerDesc->chamberInfo->xRotation = false;
00527           steerDesc->chamberInfo->yRotation = false;
00528           steerDesc->chamberInfo->zRotation = 0;
00529           steerDesc->chamberInfo->stripHorizontal = false;
00530           steerDesc->chamberInfo->unit = "cm" ;
00531       }
00532       i16 rotation =  atoi(value.c_str());
00533       if (  rotation == 0  ||  rotation == -90 ||  rotation == 90 )
00534       {
00535         steerDesc->chamberInfo->zRotation = rotation;
00536       }
00537       else
00538       { 
00539         cout << "XML error. zRotation value choise is [-90,0,90]." << endl;
00540         exit(-1);
00541       }
00542       
00543     }
00544 
00545 
00546     else if (  !balise.compare(CHAMBER) && !key.compare(STRIPHORIZONTAL) )
00547     {
00548       if ( steerDesc->chamberInfo == NULL )
00549                         {
00550                                         steerDesc->chamberInfo = new chamber_info_t();
00551                                         steerDesc->chamberInfo->xRotation = false;
00552                                         steerDesc->chamberInfo->yRotation = false;
00553                                         steerDesc->chamberInfo->zRotation = 0;
00554                                         steerDesc->chamberInfo->stripHorizontal = false;
00555           steerDesc->chamberInfo->unit = "cm" ;
00556                         }
00557                         if ( !value.compare("true") || !value.compare("TRUE") )
00558                         {
00559           steerDesc->chamberInfo->stripHorizontal = true;
00560                         }
00561     }
00562     else if (  !balise.compare(CHAMBER) && !key.compare(UNIT) )
00563     {
00564       if ( steerDesc->chamberInfo == NULL )
00565       {
00566           steerDesc->chamberInfo = new chamber_info_t();
00567           steerDesc->chamberInfo->xRotation = false;
00568           steerDesc->chamberInfo->yRotation = false;
00569                                         steerDesc->chamberInfo->zRotation = 0;
00570           steerDesc->chamberInfo->stripHorizontal = false;
00571           steerDesc->chamberInfo->unit = "cm" ;
00572       }
00573       steerDesc->chamberInfo->unit = value;
00574     }
00575 
00576     else if (  !balise.compare(CHAMBER) && !key.compare(ID) )
00577     {
00578       if ( steerDesc->chamberInfo == NULL )
00579                         {
00580                                         steerDesc->chamberInfo = new chamber_info_t();
00581                                         steerDesc->chamberInfo->xRotation = false;
00582                                         steerDesc->chamberInfo->yRotation = false;
00583                                         steerDesc->chamberInfo->zRotation = 0;
00584                                         steerDesc->chamberInfo->stripHorizontal = false;
00585           steerDesc->chamberInfo->unit = "cm" ;
00586                         }
00587       steerDesc->chamberInfo->id = atoi(value.c_str());
00588     }
00589 
00590     // Boards
00591     else if (  !balise.compare(BOARD) && !key.compare(ID) )
00592     {
00593       if ( steerDesc->boardInfo == NULL ) steerDesc->boardInfo = new BoardInfo_t();
00594       steerDesc->boardInfo->id = atoi(value.c_str());
00595       steerDesc->boardInfo->chamberId = steerDesc->lastChamberId;
00596       steerDesc->boardInfo->difId = steerDesc->lastDifId;
00597     }
00598 
00599  
00600     // Difs
00601     else if (  !balise.compare(DIF) && !key.compare(ID) )
00602     {
00603       if ( steerDesc->difInfo == NULL ) steerDesc->difInfo = new DifInfo_t();
00604       steerDesc->difInfo->id = atoi(value.c_str());
00605       steerDesc->difInfo->chamberId = steerDesc->lastChamberId;
00606     }
00607 
00608     // Chips
00609     else if (  !balise.compare(CHIP) && !key.compare(ID) )
00610     {
00611       if ( steerDesc->chipInfo == NULL ) 
00612       {
00613         steerDesc->chipInfo = new ChipInfo_t();
00614         steerDesc->chipInfo->boardId = steerDesc->lastBoardId;
00615         steerDesc->chipInfo->difId = steerDesc->lastDifId;
00616         steerDesc->chipInfo->chamberId = steerDesc->lastChamberId;
00617       }
00618       steerDesc->chipInfo->id = atoi(value.c_str());
00619     }
00620     else if (  !balise.compare(CHIP) && !key.compare(SERIAL) )
00621     {
00622       if ( steerDesc->chipInfo == NULL ) 
00623       {
00624         steerDesc->chipInfo = new ChipInfo_t();
00625         steerDesc->chipInfo->boardId = steerDesc->lastBoardId;
00626         steerDesc->chipInfo->difId = steerDesc->lastDifId;
00627         steerDesc->chipInfo->chamberId = steerDesc->lastChamberId;
00628       }
00629       steerDesc->chipInfo->serial = atoi(value.c_str());
00630     }
00631 
00632     // Slow Control
00633     else if (!balise.compare(SCPARAM) && !key.compare(SCID) )
00634     {
00635       if ( steerDesc->slowControlInfo == NULL )
00636      {
00637        steerDesc->slowControlInfo = new SlowControl_t();
00638      }
00639       steerDesc->slowControlInfo->scId = atoi(value.c_str());
00640     }
00641     else if (!balise.compare(SCPARAM) && !key.compare(TYPE) )
00642     {
00643       if ( steerDesc->slowControlInfo == NULL ) steerDesc->slowControlInfo = new SlowControl_t();
00644       steerDesc->slowControlInfo->type = value;
00645     }
00646     else if (!balise.compare(SCPARAM) && !key.compare(CHAMBERID) )
00647     {
00648       if ( steerDesc->slowControlInfo == NULL ) steerDesc->slowControlInfo = new SlowControl_t();
00649       steerDesc->slowControlInfo->chamberId = atoi(value.c_str());
00650     }
00651     else if (!balise.compare(SCPARAM) && !key.compare(DIFID) )
00652     {
00653       if ( steerDesc->slowControlInfo == NULL ) steerDesc->slowControlInfo = new SlowControl_t();
00654       steerDesc->slowControlInfo->difId = atoi(value.c_str());
00655     }
00656     else if (!balise.compare(SCPARAM) && !key.compare(BOARDID) )
00657     {
00658       if ( steerDesc->slowControlInfo == NULL ) steerDesc->slowControlInfo = new SlowControl_t();
00659       steerDesc->slowControlInfo->boardId = atoi(value.c_str());
00660     }
00661     else if (!balise.compare(SCPARAM) && !key.compare(NAME) )
00662     {
00663       if ( steerDesc->slowControlInfo == NULL ) steerDesc->slowControlInfo = new SlowControl_t();
00664       steerDesc->slowControlInfo->name = value;
00665     }
00666     else if (!balise.compare(SCPARAM) && !key.compare(PMID) )
00667     {
00668       if ( steerDesc->slowControlInfo == NULL ) steerDesc->slowControlInfo = new SlowControl_t();
00669       steerDesc->slowControlInfo->pmId = atoi(value.c_str());
00670     }
00671 
00672   } // for
00673 
00674   if (  !balise.compare(CHAMBER) && ( steerDesc->chamberInfo != NULL ) )
00675   {
00676     steerDesc->chambers.push_back(*(steerDesc->chamberInfo));
00677     steerDesc->lastChamberId = steerDesc->chamberInfo->id;
00678     steerDesc->chamberInfo = NULL;
00679   }
00680   if (  !balise.compare(BOARD) && ( steerDesc->boardInfo != NULL ) )
00681   {
00682     steerDesc->boards.push_back(*(steerDesc->boardInfo));
00683     steerDesc->lastBoardId = steerDesc->boardInfo->id;
00684     steerDesc->boardInfo = NULL;
00685   }
00686   if (  !balise.compare(INPUT) && ( steerDesc->inputInfo != NULL ) )
00687   {
00688     steerDesc->inputFiles.push_back(*(steerDesc->inputInfo));
00689     steerDesc->inputInfo = NULL;
00690   }
00691   if (!balise.compare(DIF) && ( steerDesc->difInfo != NULL ) )
00692   {
00693     steerDesc->difs.push_back(*(steerDesc->difInfo));
00694     steerDesc->lastDifId = steerDesc->difInfo->id;
00695     steerDesc->difInfo = NULL;
00696   }
00697   if (!balise.compare(CHIP) && ( steerDesc->chipInfo != NULL ) )
00698   {
00699     steerDesc->chips.push_back(*(steerDesc->chipInfo));
00700     steerDesc->chipInfo = NULL;
00701   }
00702   if (!balise.compare(SCPARAM) && ( steerDesc->slowControlInfo != NULL ) )
00703   {
00704     steerDesc->slowControls.push_back(*(steerDesc->slowControlInfo));
00705     steerDesc->slowControlInfo = NULL;
00706   }
00707 
00708 }


Member Data Documentation

string XMLTool::xmlFileName [private]

Definition at line 176 of file XMLTool.hh.

Referenced by parse().

SteerDesc* XMLTool::steerDesc [private]

Definition at line 177 of file XMLTool.hh.

Referenced by parse(), and receiveEvent().


The documentation for this class was generated from the following files:
Generated on Mon Jan 7 13:19:10 2013 for MicromegasFramework by  doxygen 1.4.7