CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Protected Member Functions | Private Attributes
DDLParser Class Reference

DDLParser is the main class of Detector Description Language Parser. More...

#include <DDLParser.h>

Public Types

typedef std::map< int,
std::pair< std::string,
std::string > > 
FileNameHolder
 
typedef
XERCES_CPP_NAMESPACE::SAX2XMLReader 
SAX2XMLReader
 

Public Member Functions

void clearFiles ()
 Clear the file list - see Warning! More...
 
 DDLParser (DDCompactView &cpv)
 Constructor MUST associate a DDCompactView storage. More...
 
std::string extractFileName (std::string fullname)
 
DDLSAX2FileHandlergetDDLSAX2FileHandler ()
 To get the parent this class allows access to the handler. More...
 
std::vector< std::string > getFileList ()
 Return list of files. More...
 
std::string getNameSpace (const std::string &fname)
 
SAX2XMLReadergetXMLParser ()
 Get the SAX2Parser from the DDLParser. USE WITH CAUTION. Set your own handler, etc. More...
 
size_t isFound (const std::string &filename)
 Is the file already known by the DDLParser? Returns 0 if not found, and index if found. More...
 
bool isParsed (const std::string &filename)
 Is the file already parsed? More...
 
int parse (const DDLDocumentProvider &dp)
 Parse all files. Return is meaningless. More...
 
void parse (const std::vector< unsigned char > &ablob, unsigned int bsize)
 
bool parseOneFile (const std::string &filename)
 Process a single files. More...
 
 ~DDLParser ()
 Destructor terminates the XMLPlatformUtils (as required by Xerces) More...
 

Protected Member Functions

 DDLParser ()
 
void parseFile (const int &numtoproc)
 Parse File. Just to hold some common looking code. More...
 

Private Attributes

DDCompactViewcpv_
 reference to storage More...
 
std::string currFileName_
 Which file is currently being processed. More...
 
DDLSAX2HandlererrHandler_
 
DDLSAX2ExpressionHandlerexpHandler_
 
DDLSAX2FileHandlerfileHandler_
 
FileNameHolder fileNames_
 List of files to be processed, obtained from the DDLDocumentProvider. More...
 
int nFiles_
 Number of files + 1. More...
 
std::map< int, bool > parsed_
 Parse status of a given file. More...
 
SAX2XMLReaderSAX2Parser_
 SAX2XMLReader is one way of parsing. More...
 

Detailed Description

DDLParser is the main class of Detector Description Language Parser.

Author
Michael Case

DDLParser.h - description

begin: Mon Oct 22 2001 email: case@.nosp@m.ucdh.nosp@m.ep.uc.nosp@m.davi.nosp@m.s.edu

Singleton which controls the parsing of XML files (DDL). It guarantees that a given filename will only be parsed once regardless of its path. It now relies on a DDLDocumentProvider class which provides a list of file names and URLs to be parsed.

It uses the Xerces C++ Parser from the Apache Group straight-forwardly. One main thing to note is that only one DDLParser can ever be made. This allows for sub-components of the parser to easily find out information from the parser during run-time.

There is an interface to parse just one file. If one uses this method and does not use the default DDLDocumentProvider user is responsible for also setting the DDRootDef.

Modification: 2003-02-13: Michael Case, Stepan Wynhoff and Martin Liendl 2003-02-24: same. DDLParser will use DDLDocumentProvider (abstract). One of these and will be defaulted to DDLConfiguration. This will read the "configuration.xml" file provided and will be used by the Parser to "get" the files. 2005-11-13: Michael Case removed some of the un-necessary methods that were deprecated. 2010-01 to 2010-04 sometime: Michael Case removed singleton-ness. MUST have a DDCompactView to refer to and no more default constructor at the moment. 2010-07-29: removed DDLConfiguration; use FIPConfiguration, it is easier. for CMSSW Framework example see XMLIdealGeometryESSource (different DDLDocumentProvider completely

Definition at line 64 of file DDLParser.h.

Member Typedef Documentation

typedef std::map< int, std::pair<std::string, std::string> > DDLParser::FileNameHolder

Definition at line 70 of file DDLParser.h.

typedef XERCES_CPP_NAMESPACE::SAX2XMLReader DDLParser::SAX2XMLReader

Definition at line 68 of file DDLParser.h.

Constructor & Destructor Documentation

DDLParser::DDLParser ( DDCompactView cpv)

Constructor MUST associate a DDCompactView storage.

Definition at line 30 of file DDLParser.cc.

DDLParser::DDLParser ( )
protected
DDLParser::~DDLParser ( void  )

Destructor terminates the XMLPlatformUtils (as required by Xerces)

Definition at line 52 of file DDLParser.cc.

Member Function Documentation

void DDLParser::clearFiles ( void  )

Clear the file list - see Warning!

This could result in mangled geometry if the Core has not been cleared.

Definition at line 373 of file DDLParser.cc.

Referenced by XMLIdealMagneticFieldGeometryESProducer::produce(), and XMLIdealGeometryESProducer::produce().

std::string DDLParser::extractFileName ( std::string  fullname)

Definition at line 380 of file DDLParser.cc.

DDLSAX2FileHandler * DDLParser::getDDLSAX2FileHandler ( void  )

To get the parent this class allows access to the handler.

In order to retrieve the name of the parent element from DDLSAX2Handlers.

Definition at line 73 of file DDLParser.cc.

Referenced by XMLIdealGeometryESSource::produce(), XMLIdealMagneticFieldGeometryESProducer::produce(), and XMLIdealGeometryESProducer::produce().

std::vector< std::string > DDLParser::getFileList ( void  )

Return list of files.

Definition at line 193 of file DDLParser.cc.

std::string DDLParser::getNameSpace ( const std::string &  fname)

Definition at line 391 of file DDLParser.cc.

SAX2XMLReader * DDLParser::getXMLParser ( void  )

Get the SAX2Parser from the DDLParser. USE WITH CAUTION. Set your own handler, etc.

This method allows external "users" to use the current DDLParser on their own. by giving them access to the SAX2XMLReader. This may not be a good idea! The reason that I

Definition at line 67 of file DDLParser.cc.

Referenced by FIPConfiguration::readConfig().

size_t DDLParser::isFound ( const std::string &  filename)

Is the file already known by the DDLParser? Returns 0 if not found, and index if found.

Definition at line 79 of file DDLParser.cc.

bool DDLParser::isParsed ( const std::string &  filename)

Is the file already parsed?

Definition at line 99 of file DDLParser.cc.

int DDLParser::parse ( const DDLDocumentProvider dp)

Parse all files. Return is meaningless.

Definition at line 204 of file DDLParser.cc.

Referenced by XMLIdealGeometryESSource::produce(), XMLIdealMagneticFieldGeometryESProducer::produce(), and XMLIdealGeometryESProducer::produce().

void DDLParser::parse ( const std::vector< unsigned char > &  ablob,
unsigned int  bsize 
)

Definition at line 185 of file DDLParser.cc.

void DDLParser::parseFile ( const int &  numtoproc)
protected

Parse File. Just to hold some common looking code.

Definition at line 342 of file DDLParser.cc.

bool DDLParser::parseOneFile ( const std::string &  filename)

Process a single files.

This method allows a user to add to an existing DDD by parsing a new XML file. Ideally, these would be in addition to an existing DDD configuration which was processed using Parse(...).

The idea is based on whether users decide that the configuration will only hold "standard geometry files" and that any ancillary parameter files, filters and so forth will be unknown to the main configuration file. For me, this seems to go against the principle of knowing what files are relevant because now, there is no central way to find out (externally) what XML files generate the DDD in memory.

On the other hand, if on any run, a dumpFileList is run, then the user will at least know what files were used from where in a given run.

2007-04-06: filename is now relative to src directory of checkout (or share). edm:FileInPath used internally.

Definition at line 110 of file DDLParser.cc.

Member Data Documentation

DDCompactView& DDLParser::cpv_
private

reference to storage

Definition at line 146 of file DDLParser.h.

std::string DDLParser::currFileName_
private

Which file is currently being processed.

Definition at line 158 of file DDLParser.h.

DDLSAX2Handler* DDLParser::errHandler_
private

Definition at line 165 of file DDLParser.h.

DDLSAX2ExpressionHandler* DDLParser::expHandler_
private

Definition at line 164 of file DDLParser.h.

DDLSAX2FileHandler* DDLParser::fileHandler_
private

Definition at line 163 of file DDLParser.h.

FileNameHolder DDLParser::fileNames_
private

List of files to be processed, obtained from the DDLDocumentProvider.

Definition at line 149 of file DDLParser.h.

int DDLParser::nFiles_
private

Number of files + 1.

Definition at line 155 of file DDLParser.h.

std::map<int, bool> DDLParser::parsed_
private

Parse status of a given file.

Definition at line 152 of file DDLParser.h.

SAX2XMLReader* DDLParser::SAX2Parser_
private

SAX2XMLReader is one way of parsing.

Definition at line 161 of file DDLParser.h.