ROTypedXMLRoutesLoader Class Reference

#include <ROTypedXMLRoutesLoader.h>

Inheritance diagram for ROTypedXMLRoutesLoader:

ROAbstractRouteDefLoader SUMOSAXHandler GenericSAXHandler RORDLoader_SUMOBase RORDLoader_TripDefs RORDGenerator_ODAmounts

Detailed Description

Base class for loading routes from XML-files.

Base class for loaders which load route definitions which use XML-derived formats. Some methods as the initialisation and the file processing, together with the need for a parser are common to all such loaders.

Todo:
recheck/refactor

Definition at line 59 of file ROTypedXMLRoutesLoader.h.


Public Member Functions

void characters (const XMLCh *const chars, const XERCES3_SIZE_t length)
 The inherited method called when characters occured.
void endDocument ()
 Called when the document has ended.
void endElement (const XMLCh *const uri, const XMLCh *const localname, const XMLCh *const qname)
 The inherited method called when a tag is being closed.
const std::string & getFileName () const throw ()
 returns the current file name
void registerParent (const SumoXMLTag tag, GenericSAXHandler *handler)
 Assigning a parent handler which is enabled when the specified tag is closed.
 ROTypedXMLRoutesLoader (RONet &net, SUMOTime begin, SUMOTime end, const std::string &file="") throw (ProcessError)
 Constructor.
void setFileName (const std::string &name) throw ()
 Sets the current file name.
void startElement (const XMLCh *const uri, const XMLCh *const localname, const XMLCh *const qname, const Attributes &attrs)
 The inherited method called when a new tag opens.
virtual ~ROTypedXMLRoutesLoader () throw ()
 Destructor.
inherited from ROAbstractRouteDefLoader
bool ended () const throw ()
 Returns the information whether no routes are available from this loader anymore.
bool readRoutesAtLeastUntil (SUMOTime time, bool skipping) throw (ProcessError)
 Adds routes from the file until the given time is reached.
SAX ErrorHandler callbacks
void error (const SAXParseException &exception) throw (ProcessError)
 Handler for XML-errors.
void fatalError (const SAXParseException &exception) throw (ProcessError)
 Handler for XML-errors.
void warning (const SAXParseException &exception) throw ()
 Handler for XML-warnings.
Methods to be implemented
virtual SUMOTime getLastReadTimeStep () const =0 throw ()
 Returns the time the current (last read) route starts at.

Protected Member Functions

std::string buildErrorMessage (const SAXParseException &exception) throw ()
 Builds an error message.
virtual void myCharacters (SumoXMLTag element, const std::string &chars) throw (ProcessError)
 Callback method for characters to implement by derived classes.
virtual void myEndElement (SumoXMLTag element) throw (ProcessError)
 Callback method for a closing tag to implement by derived classes.
virtual void myStartElement (SumoXMLTag element, const SUMOSAXAttributes &attrs) throw (ProcessError)
 Callback method for an opening tag to implement by derived classes.
Virtual methods to implement by derived classes
virtual void beginNextRoute ()=0 throw ()
 Returns Initialises the reading of a further route.
virtual bool nextRouteRead ()=0 throw ()

Protected Attributes

SUMOTime myBegin
 The time for which the first route shall be loaded.
SUMOTime myEnd
 The time for which the first route shall be loaded.
bool myEnded
 Information whether the whole file has been parsed.
RONetmyNet
 The network to add routes to.
SAX2XMLReader * myParser
 The parser used.
XMLPScanToken myToken
 Information about the current position within the file.

Private Member Functions

ROTypedXMLRoutesLoaderoperator= (const ROTypedXMLRoutesLoader &src)
 Invalidated assignment operator.
 ROTypedXMLRoutesLoader (const ROTypedXMLRoutesLoader &src)
 Invalidated copy constructor.

Constructor & Destructor Documentation

ROTypedXMLRoutesLoader::ROTypedXMLRoutesLoader ( RONet net,
SUMOTime  begin,
SUMOTime  end,
const std::string &  file = "" 
) throw (ProcessError)

Constructor.

Parameters:
[in] vb The vehicle builder to use
[in] net The network to add vehicles to
[in] begin The time step import shall start at
[in] end The time step import shall stop at
[in] file Name of the used input file
Exceptions:
ProcessError If an error occured during initialisation of parsing the xml-file

Definition at line 48 of file ROTypedXMLRoutesLoader.cpp.

00052         : ROAbstractRouteDefLoader(net, begin, end),
00053         SUMOSAXHandler(file),
00054         myParser(XMLSubSys::getSAXReader(*this)), myToken(), myEnded(false) {
00055     try {
00056         myParser->parseFirst(getFileName().c_str(), myToken);
00057     } catch (...) {
00058         throw ProcessError();
00059     }
00060 }

ROTypedXMLRoutesLoader::~ROTypedXMLRoutesLoader (  )  throw () [virtual]

Destructor.

Definition at line 63 of file ROTypedXMLRoutesLoader.cpp.

References myParser.

00063                                                         {
00064     delete myParser;
00065 }

ROTypedXMLRoutesLoader::ROTypedXMLRoutesLoader ( const ROTypedXMLRoutesLoader src  )  [private]

Invalidated copy constructor.


Member Function Documentation

virtual void ROTypedXMLRoutesLoader::beginNextRoute (  )  throw () [protected, pure virtual]

Returns Initialises the reading of a further route.

Todo:
recheck/refactor

Implemented in RORDLoader_SUMOBase, and RORDLoader_TripDefs.

Referenced by readRoutesAtLeastUntil().

std::string SUMOSAXHandler::buildErrorMessage ( const SAXParseException &  exception  )  throw () [protected, inherited]

Builds an error message.

The error message includes the file name and the line/column information as supported by the given SAXParseException

Parameters:
[in] exception The name of the currently processed file
Returns:
A string describing the given exception

Definition at line 55 of file SUMOSAXHandler.cpp.

References GenericSAXHandler::getFileName().

Referenced by SUMOSAXHandler::error(), SUMOSAXHandler::fatalError(), and SUMOSAXHandler::warning().

00055                                                                             {
00056     std::ostringstream buf;
00057     char *pMsg = XMLString::transcode(exception.getMessage());
00058     buf << pMsg << std::endl;
00059     buf << " In file '" << getFileName() << "'" << std::endl;
00060     buf << " At line/column " << exception.getLineNumber()+1
00061     << '/' << exception.getColumnNumber() << "." << std::endl;
00062     XMLString::release(&pMsg);
00063     return buf.str();
00064 }

void GenericSAXHandler::characters ( const XMLCh *const   chars,
const XERCES3_SIZE_t  length 
) [inherited]

The inherited method called when characters occured.

The retrieved characters are converted into a string and appended into a private buffer. They are reported as soon as the element ends.

Todo:
recheck/describe what happens with characters when a new element is opened
Todo:
describe characters processing in the class' head

Definition at line 168 of file GenericSAXHandler.cpp.

References GenericSAXHandler::myCharactersVector.

00169                                                            {
00170     myCharactersVector.push_back(TplConvert<XMLCh>::_2str(chars, length));
00171 }

void ROTypedXMLRoutesLoader::endDocument (  ) 

Called when the document has ended.

Todo:
Recheck usage of route loaders; it is not very fine to have one that use a parser and other that do not

Definition at line 81 of file ROTypedXMLRoutesLoader.cpp.

References myEnded.

00081                                     {
00082     myEnded = true;
00083 }

bool ROTypedXMLRoutesLoader::ended (  )  const throw () [inline, virtual]

Returns the information whether no routes are available from this loader anymore.

Returns:
Whether the whole input has been processed

Implements ROAbstractRouteDefLoader.

Definition at line 97 of file ROTypedXMLRoutesLoader.h.

References myEnded.

Referenced by readRoutesAtLeastUntil().

00097                                {
00098         return myEnded;
00099     }

void GenericSAXHandler::endElement ( const XMLCh *const  uri,
const XMLCh *const  localname,
const XMLCh *const   qname 
) [inherited]

The inherited method called when a tag is being closed.

This method calls the user-implemented methods myCharacters with the previously collected and converted characters.

Then, myEndElement is called, supplying it the qname converted to its enum- and string-representations.

Todo:
recheck/describe encoding of the string-representation
Todo:
do not generate and report the string-representation

Definition at line 118 of file GenericSAXHandler.cpp.

References TplConvert< E >::_2str(), GenericSAXHandler::convertTag(), GenericSAXHandler::myCharacters(), GenericSAXHandler::myCharactersVector, GenericSAXHandler::myEndElement(), GenericSAXHandler::myParentHandler, GenericSAXHandler::myParentIndicator, XMLSubSys::setHandler(), SUMO_TAG_INCLUDE, and SUMO_TAG_NOTHING.

00120                                                         {
00121     std::string name = TplConvert<XMLCh>::_2str(qname);
00122     SumoXMLTag element = convertTag(name);
00123     // collect characters
00124     if (myCharactersVector.size()!=0) {
00125         size_t len = 0;
00126         unsigned i;
00127         for (i=0; i<myCharactersVector.size(); ++i) {
00128             len += myCharactersVector[i].length();
00129         }
00130         char *buf = new char[len+1];
00131         size_t pos = 0;
00132         for (i=0; i<myCharactersVector.size(); ++i) {
00133             memcpy((unsigned char*) buf+pos, (unsigned char*) myCharactersVector[i].c_str(),
00134                    sizeof(char)*myCharactersVector[i].length());
00135             pos += myCharactersVector[i].length();
00136         }
00137         buf[pos] = 0;
00138 
00139         // call user handler
00140         try {
00141             myCharacters(element, buf);
00142         } catch (std::runtime_error &) {
00143             delete[] buf;
00144             throw;
00145         }
00146         delete[] buf;
00147     }
00148     if (element != SUMO_TAG_INCLUDE) {
00149         myEndElement(element);
00150         if (myParentHandler && myParentIndicator == element) {
00151             XMLSubSys::setHandler(*myParentHandler);
00152             myParentIndicator = SUMO_TAG_NOTHING;
00153             myParentHandler = 0;
00154         }
00155     }
00156 }

void SUMOSAXHandler::error ( const SAXParseException &  exception  )  throw (ProcessError) [inherited]

Handler for XML-errors.

The message is built using buildErrorMessage and thrown within a ProcessError.

Parameters:
[in] exception The occured exception to process
Exceptions:
ProcessError On any call

Definition at line 74 of file SUMOSAXHandler.cpp.

References SUMOSAXHandler::buildErrorMessage().

00074                                                                             {
00075     throw ProcessError(buildErrorMessage(exception));
00076 }

void SUMOSAXHandler::fatalError ( const SAXParseException &  exception  )  throw (ProcessError) [inherited]

Handler for XML-errors.

The message is built using buildErrorMessage and thrown within a ProcessError.

Exceptions:
ProcessError On any call
Parameters:
[in] exception The occured exception to process

Definition at line 80 of file SUMOSAXHandler.cpp.

References SUMOSAXHandler::buildErrorMessage().

00080                                                                                  {
00081     throw ProcessError(buildErrorMessage(exception));
00082 }

const std::string & GenericSAXHandler::getFileName (  )  const throw () [inherited]

virtual SUMOTime ROAbstractRouteDefLoader::getLastReadTimeStep (  )  const throw () [pure virtual, inherited]

Returns the time the current (last read) route starts at.

Returns:
The least time step that was read by this reader

Implemented in RORDLoader_SUMOBase, and RORDLoader_TripDefs.

Referenced by readRoutesAtLeastUntil().

void GenericSAXHandler::myCharacters ( SumoXMLTag  element,
const std::string &  chars 
) throw (ProcessError) [protected, virtual, inherited]

Callback method for characters to implement by derived classes.

Called by "endElement" (see there).

Parameters:
[in] element The opened element, given as a SumoXMLTag
[in] chars The complete embedded character string ProcessError These method may throw a ProcessError if something fails

Reimplemented in ROJTRTurnDefLoader, MSRouteHandler, NIImporter_OpenDrive, NIImporter_SUMO, NLHandler, PCLoaderXML, PCNetProjectionLoader, and RORDLoader_SUMOBase.

Definition at line 189 of file GenericSAXHandler.cpp.

Referenced by GenericSAXHandler::endElement().

00189 {}

void GenericSAXHandler::myEndElement ( SumoXMLTag  element  )  throw (ProcessError) [protected, virtual, inherited]

Callback method for a closing tag to implement by derived classes.

Called by "endElement" (see there).

Parameters:
[in] element The closed element, given as a SumoXMLTag ProcessError These method may throw a ProcessError if something fails

Reimplemented in MSRouteHandler, MSLaneSpeedTrigger, MSTriggeredRerouter, NIImporter_OpenDrive, NIImporter_OpenStreetMap::NodesHandler, NIImporter_OpenStreetMap::EdgesHandler, NIImporter_SUMO, NIXMLEdgesHandler, NLHandler, ODDistrictHandler, PCLoaderOSM::NodesHandler, PCLoaderOSM::EdgesHandler, RORDGenerator_ODAmounts, RORDLoader_SUMOBase, RORDLoader_TripDefs, traci::TraCIHandler, and SAXWeightsHandler.

Definition at line 193 of file GenericSAXHandler.cpp.

Referenced by GenericSAXHandler::endElement().

00193 {}

void GenericSAXHandler::myStartElement ( SumoXMLTag  element,
const SUMOSAXAttributes attrs 
) throw (ProcessError) [protected, virtual, inherited]

virtual bool ROTypedXMLRoutesLoader::nextRouteRead (  )  throw () [protected, pure virtual]

Returns the information whether a route was read

Returns:
Whether a further route was read
Todo:
recheck/refactor

Implemented in RORDLoader_SUMOBase, and RORDLoader_TripDefs.

Referenced by readRoutesAtLeastUntil().

ROTypedXMLRoutesLoader& ROTypedXMLRoutesLoader::operator= ( const ROTypedXMLRoutesLoader src  )  [private]

Invalidated assignment operator.

bool ROTypedXMLRoutesLoader::readRoutesAtLeastUntil ( SUMOTime  time,
bool  skipping 
) throw (ProcessError) [virtual]

Adds routes from the file until the given time is reached.

Parameters:
[in] time The time until which route definitions shall be loaded
[in] skipping Whether routes shall not be added
Returns:
Whether any errors occured
Exceptions:
ProcessError If a major error occured
See also:
ROAbstractRouteDefLoader::readRoutesAtLeastUntil

Implements ROAbstractRouteDefLoader.

Reimplemented in RORDGenerator_ODAmounts.

Definition at line 69 of file ROTypedXMLRoutesLoader.cpp.

References beginNextRoute(), ended(), ROAbstractRouteDefLoader::getLastReadTimeStep(), myParser, myToken, and nextRouteRead().

00069                                                                                                {
00070     while (getLastReadTimeStep()<time&&!ended()) {
00071         beginNextRoute();
00072         while (!nextRouteRead()&&!ended()) {
00073             myParser->parseNext(myToken);
00074         }
00075     }
00076     return true;
00077 }

void GenericSAXHandler::registerParent ( const SumoXMLTag  tag,
GenericSAXHandler handler 
) [inherited]

Assigning a parent handler which is enabled when the specified tag is closed.

Definition at line 160 of file GenericSAXHandler.cpp.

References GenericSAXHandler::myParentHandler, GenericSAXHandler::myParentIndicator, and XMLSubSys::setHandler().

Referenced by NLTriggerBuilder::parseAndBuildLaneSpeedTrigger().

00160                                                                                   {
00161     myParentHandler = handler;
00162     myParentIndicator = tag;
00163     XMLSubSys::setHandler(*this);
00164 }

void GenericSAXHandler::setFileName ( const std::string &  name  )  throw () [inherited]

Sets the current file name.

Parameters:
[in] name The name of the currently processed file
Todo:
Hmmm - this is as unsafe as having a direct access to the variable; recheck

Definition at line 72 of file GenericSAXHandler.cpp.

References GenericSAXHandler::myFileName.

Referenced by PCNetProjectionLoader::loadIfSet(), ROLoader::loadNet(), NIImporter_OpenStreetMap::loadNetwork(), NILoader::loadXMLType(), and traci::TraCIServer::TraCIServer().

00072                                                             {
00073     myFileName = name;
00074 }

void GenericSAXHandler::startElement ( const XMLCh *const  uri,
const XMLCh *const  localname,
const XMLCh *const   qname,
const Attributes &  attrs 
) [inherited]

The inherited method called when a new tag opens.

The method parses the supplied XMLCh*-qname using the internal name/enum-map to obtain the enum representation of the attribute name.

Then, "myStartElement" is called supplying the enumeration value, the string-representation of the name and the attributes.

Todo:
recheck/describe encoding of the string-representation
Todo:
do not generate and report the string-representation

Definition at line 97 of file GenericSAXHandler.cpp.

References TplConvert< E >::_2str(), GenericSAXHandler::convertTag(), FileHelpers::getConfigurationRelative(), GenericSAXHandler::getFileName(), SUMOSAXAttributesImpl_Xerces::getString(), FileHelpers::isAbsolute(), GenericSAXHandler::myCharactersVector, GenericSAXHandler::myPredefinedTags, GenericSAXHandler::myPredefinedTagsMML, GenericSAXHandler::myStartElement(), XMLSubSys::runParser(), SUMO_ATTR_HREF, and SUMO_TAG_INCLUDE.

00100                                                          {
00101     std::string name = TplConvert<XMLCh>::_2str(qname);
00102     SumoXMLTag element = convertTag(name);
00103     myCharactersVector.clear();
00104     SUMOSAXAttributesImpl_Xerces na(attrs, myPredefinedTags, myPredefinedTagsMML);
00105     if (element == SUMO_TAG_INCLUDE) {
00106         std::string file = na.getString(SUMO_ATTR_HREF);
00107         if (!FileHelpers::isAbsolute(file)) {
00108             file = FileHelpers::getConfigurationRelative(getFileName(), file);
00109         }
00110         XMLSubSys::runParser(*this, file);
00111     } else {
00112         myStartElement(element, na);
00113     }
00114 }

void SUMOSAXHandler::warning ( const SAXParseException &  exception  )  throw () [inherited]

Handler for XML-warnings.

The message is built using buildErrorMessage and reported to the warning-instance of the MsgHandler.

Parameters:
[in] exception The occured exception to process

Definition at line 68 of file SUMOSAXHandler.cpp.

References SUMOSAXHandler::buildErrorMessage(), MsgHandler::getWarningInstance(), and MsgHandler::inform().


Field Documentation

SUMOTime ROAbstractRouteDefLoader::myEnd [protected, inherited]

The time for which the first route shall be loaded.

Definition at line 110 of file ROAbstractRouteDefLoader.h.

Referenced by RORDGenerator_ODAmounts::buildForTimeStep(), RORDLoader_SUMOBase::closeVehicle(), and RORDLoader_TripDefs::myEndElement().

Information whether the whole file has been parsed.

Definition at line 139 of file ROTypedXMLRoutesLoader.h.

Referenced by RORDGenerator_ODAmounts::buildForTimeStep(), endDocument(), and ended().

RONet& ROAbstractRouteDefLoader::myNet [protected, inherited]

SAX2XMLReader* ROTypedXMLRoutesLoader::myParser [protected]

XMLPScanToken ROTypedXMLRoutesLoader::myToken [protected]

Information about the current position within the file.

Definition at line 136 of file ROTypedXMLRoutesLoader.h.

Referenced by readRoutesAtLeastUntil(), and RORDGenerator_ODAmounts::RORDGenerator_ODAmounts().


The documentation for this class was generated from the following files:

Generated on Wed May 5 00:07:00 2010 for Sumo - Simulation of Urban MObility by  doxygen 1.5.6