The Gaudi Framework  master (594c33fa)
Gaudi::XMLFileCatalog Class Reference

#include </builds/gaudi/Gaudi/GaudiUtils/src/component/XMLFileCatalog.h>

Inheritance diagram for Gaudi::XMLFileCatalog:
Collaboration diagram for Gaudi::XMLFileCatalog:

Public Member Functions

 XMLFileCatalog (CSTR url, IMessageSvc *m)
 Create a catalog file, initialization of XercesC. More...
 
std::string createFID () const override
 Catalog interface
More...
 
CSTR connectInfo () const override
 Access to connect string. More...
 
void init () override
 Parse the DOM tree of the XML catalog. More...
 
void commit () override
 Save DOM catalog to file. More...
 
void rollback () override
 Save DOM catalog to file. More...
 
bool readOnly () const override
 Check if the catalog is read-only. More...
 
bool dirty () const override
 Check if the catalog should be updated. More...
 
bool existsPFN (CSTR pfn) const override
 Return the status of a physical file name. More...
 
std::string lookupPFN (CSTR fid) const override
 Lookup file identifier by physical file name. More...
 
bool existsLFN (CSTR lfn) const override
 Return the status of a logical file name. More...
 
std::string lookupLFN (CSTR lfn) const override
 Lookup file identifier by logical file name. More...
 
bool existsFID (CSTR fid) const override
 Return the status of a FileID. More...
 
void getPFN (CSTR fid, Files &files) const override
 Dump all physical file names of the catalog and their attributes associate to the FileID. More...
 
void getLFN (CSTR fid, Files &files) const override
 Dump all logical file names of the catalog associate to the FileID. More...
 
void getFID (Strings &fids) const override
 Dump all file Identifiers. More...
 
void deleteFID (CSTR FileID) const override
 Delete FileID Node from the catalog. More...
 
void registerPFN (CSTR fid, CSTR pfn, CSTR ftype) const override
 Create a FileID and Node of the physical file name with all the attributes. More...
 
void registerLFN (CSTR fid, CSTR lfn) const override
 Create a FileID and Node of the logical file name with all the attributes. More...
 
void registerFID (CSTR fid) const override
 Create a FileID and Node. More...
 
void renamePFN (CSTR pfn, CSTR new_pfn) const override
 rename a PFN More...
 
void deletePFN (CSTR pfn) const override
 remove a PFN More...
 
void getMetaData (CSTR fid, Attributes &attr) const override
 Dump all MetaData of the catalog for a given file ID. More...
 
std::string getMetaDataItem (CSTR fid, CSTR name) const override
 Access metadata item. More...
 
void setMetaData (CSTR fid, CSTR name, CSTR value) const override
 Insert/update metadata item. More...
 
void dropMetaData (CSTR fid) const override
 Drop all metadata of one FID. More...
 
void dropMetaData (CSTR fid, CSTR attr) const override
 Drop specified metadata item. More...
 
- Public Member Functions inherited from implements< IFileCatalog >
void * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::stringgetInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
 implements ()=default
 Default constructor. More...
 
 implements (const implements &)
 Copy constructor (zero the reference count) More...
 
implementsoperator= (const implements &)
 Assignment operator (do not touch the reference count). More...
 
unsigned long addRef () override
 Reference Interface instance
More...
 
unsigned long release () override
 Release Interface instance
More...
 
unsigned long refCount () const override
 Current reference count
More...
 

Protected Types

typedef const std::stringCSTR
 

Private Member Functions

xercesc::DOMDocument * getDoc (bool throw_if_no_exists=true) const
 
std::string getfile (bool create)
 
void printError (CSTR msg, bool throw_exc=true) const
 
std::string lookupFID (CSTR lfn) const
 
xercesc::DOMNode * element (CSTR fid, bool print_err=true) const
 
xercesc::DOMNode * child (xercesc::DOMNode *par, CSTR tag, CSTR attr="", CSTR val="") const
 
std::pair< xercesc::DOMElement *, xercesc::DOMElement * > i_registerFID (CSTR fid) const
 

Private Attributes

bool m_rdOnly = false
 
bool m_update = false
 
xercesc::DOMDocument * m_doc = nullptr
 
std::unique_ptr< xercesc::XercesDOMParser > m_parser
 
std::unique_ptr< xercesc::ErrorHandler > m_errHdlr
 
std::string m_file
 
IMessageSvcm_msgSvc
 

Additional Inherited Members

- Public Types inherited from implements< IFileCatalog >
using base_class = implements< Interfaces... >
 Typedef to this class. More...
 
using extend_interfaces_base = extend_interfaces< Interfaces... >
 Typedef to the base of this class. More...
 
using iids = typename extend_interfaces_base::ext_iids
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
 take union of the ext_iids of all Interfaces... More...
 
- Protected Attributes inherited from implements< IFileCatalog >
std::atomic_ulong m_refCount
 Reference counter
More...
 

Detailed Description

This class constitutes the core of the XML based FileCatalog API for POOL. It uses the DOM model and the external XercesC library for parsing.

Definition at line 37 of file XMLFileCatalog.h.

Member Typedef Documentation

◆ CSTR

typedef const std::string& Gaudi::XMLFileCatalog::CSTR
protected

Definition at line 39 of file XMLFileCatalog.h.

Constructor & Destructor Documentation

◆ XMLFileCatalog()

XMLFileCatalog::XMLFileCatalog ( CSTR  url,
IMessageSvc m 
)

Create a catalog file, initialization of XercesC.

Definition at line 189 of file XMLFileCatalog.cpp.

189 : m_file( uri ), m_msgSvc( m ) {}

Member Function Documentation

◆ child()

DOMNode * XMLFileCatalog::child ( xercesc::DOMNode *  par,
CSTR  tag,
CSTR  attr = "",
CSTR  val = "" 
) const
private

Definition at line 270 of file XMLFileCatalog.cpp.

270  {
271  for ( XMLCollection c( par ); c; ++c ) {
272  if ( c.tag() == tag ) {
273  if ( !attr.empty() && c.attr( attr ) != val ) continue;
274  return c;
275  }
276  }
277  return 0;
278 }

◆ commit()

void XMLFileCatalog::commit ( )
override

Save DOM catalog to file.

Definition at line 447 of file XMLFileCatalog.cpp.

447  {
448  try {
449  if ( dirty() && !readOnly() ) {
450  string xmlfile = getfile( true );
451  XMLStr ii( "LS" );
452  DOMImplementation* imp = DOMImplementationRegistry::getDOMImplementation( ii );
453  auto tar = std::make_unique<LocalFileFormatTarget>( xmlfile.c_str() );
454 #if _XERCES_VERSION <= 30000
455  DOMWriter* wr = imp->createDOMWriter();
456  wr->setFeature( XMLUni::fgDOMWRTFormatPrettyPrint, true );
457  wr->writeNode( tar.get(), *m_doc );
458  wr->release();
459 #else
460  DOMLSOutput* output = imp->createLSOutput();
461  output->setByteStream( tar.get() );
462  DOMLSSerializer* wr = imp->createLSSerializer();
463  wr->getDomConfig()->setParameter( XMLStr( "format-pretty-print" ), true );
464  wr->write( m_doc, output );
465  output->release();
466  wr->release();
467 #endif
468  }
469  } catch ( exception& e ) { printError( string( "Cannot open output file:" ) + e.what() ); } catch ( ... ) {
470  printError( "Unknown IO rrror." );
471  }
472 }

◆ connectInfo()

CSTR Gaudi::XMLFileCatalog::connectInfo ( ) const
inlineoverride

Access to connect string.

Definition at line 49 of file XMLFileCatalog.h.

49 { return m_file; }

◆ createFID()

std::string XMLFileCatalog::createFID ( ) const
override

Catalog interface

Create file identifier using UUID mechanism.

Create file identifier using UUID mechanism

Definition at line 192 of file XMLFileCatalog.cpp.

192 { return createGuidAsString(); }

◆ deleteFID()

void XMLFileCatalog::deleteFID ( CSTR  FileID) const
override

Delete FileID Node from the catalog.

Definition at line 315 of file XMLFileCatalog.cpp.

315  {
316  DOMNode *pn = nullptr, *fn = element( fid );
317  if ( fn ) pn = fn->getParentNode();
318  if ( pn ) pn->removeChild( fn );
319 }

◆ deletePFN()

void XMLFileCatalog::deletePFN ( CSTR  pfn) const
override

remove a PFN

Definition at line 338 of file XMLFileCatalog.cpp.

338  {
339  DOMNode* node = getDoc( true )->getElementById( XMLStr( pfn ) );
340  if ( node ) {
341  DOMNode* pcoll_node = node->getParentNode();
342  pcoll_node->removeChild( node );
343  m_update = true;
344  for ( XMLCollection pcoll( pcoll_node, true ); pcoll; ++pcoll ) {
345  return; // there are other PFN entries left, so we are done
346  }
347  // delete empty file entry
348  DOMNode* file_node = pcoll_node->getParentNode();
349  file_node->getParentNode()->removeChild( file_node );
350  }
351 }

◆ dirty()

bool Gaudi::XMLFileCatalog::dirty ( ) const
inlineoverride

Check if the catalog should be updated.

Definition at line 61 of file XMLFileCatalog.h.

61 { return m_update; }

◆ dropMetaData() [1/2]

void Gaudi::XMLFileCatalog::dropMetaData ( CSTR  fid) const
inlineoverride

Drop all metadata of one FID.

Definition at line 97 of file XMLFileCatalog.h.

97 { dropMetaData( fid, "*" ); }

◆ dropMetaData() [2/2]

void XMLFileCatalog::dropMetaData ( CSTR  fid,
CSTR  attr 
) const
override

Drop specified metadata item.

Definition at line 301 of file XMLFileCatalog.cpp.

301  {
302  vector<DOMNode*> gbc;
303  DOMNode* fn = getDoc( true )->getElementById( XMLStr( fid ) );
304  for ( XMLCollection c{ child( fn, MetaNode ) }; c; ++c )
305  if ( attr[0] == '*' || !c.attr( attr ).empty() ) gbc.push_back( c );
306  for ( const auto& i : gbc ) fn->removeChild( i );
307 }

◆ element()

DOMNode * XMLFileCatalog::element ( CSTR  fid,
bool  print_err = true 
) const
private

Definition at line 309 of file XMLFileCatalog.cpp.

309  {
310  DOMNode* node = getDoc( true )->getElementById( XMLStr( element_name ) );
311  if ( !node && print_err ) printError( "Cannot find element:" + element_name );
312  return node;
313 }

◆ existsFID()

bool Gaudi::XMLFileCatalog::existsFID ( CSTR  fid) const
inlineoverride

Return the status of a FileID.

Definition at line 71 of file XMLFileCatalog.h.

71 { return element( fid, false ) != 0; }

◆ existsLFN()

bool Gaudi::XMLFileCatalog::existsLFN ( CSTR  lfn) const
inlineoverride

Return the status of a logical file name.

Definition at line 67 of file XMLFileCatalog.h.

67 { return element( lfn, false ) != 0; }

◆ existsPFN()

bool Gaudi::XMLFileCatalog::existsPFN ( CSTR  pfn) const
inlineoverride

Return the status of a physical file name.

Definition at line 63 of file XMLFileCatalog.h.

63 { return element( pfn, false ) != 0; }

◆ getDoc()

DOMDocument * XMLFileCatalog::getDoc ( bool  throw_if_no_exists = true) const
private

Definition at line 194 of file XMLFileCatalog.cpp.

194  {
195  if ( !m_doc && throw_if_no_exists ) printError( "The XML catalog was not started.", true );
196  return m_doc;
197 }

◆ getFID()

void XMLFileCatalog::getFID ( Strings &  fids) const
override

Dump all file Identifiers.

Definition at line 245 of file XMLFileCatalog.cpp.

245  {
246  fids.clear();
247  DOMNode* fde = getDoc( true )->getElementsByTagName( XMLStr( "*" ) )->item( 0 );
248  for ( XMLCollection c( child( fde, "File" ), false ); c; ++c ) fids.push_back( c.attr( Attr_ID ) );
249 }

◆ getfile()

string XMLFileCatalog::getfile ( bool  create)
private

Definition at line 474 of file XMLFileCatalog.cpp.

474  {
475  string protocol, path;
476  XMLURL xerurl;
477  try {
478  xerurl = (const XMLCh*)XMLStr( m_file );
479  protocol = _toString( xerurl.getProtocolName() );
480  path = _toString( xerurl.getPath() );
481  } catch ( const XMLException& e ) { printError( _toString( e.getMessage() ) ); }
482  if ( protocol.empty() ) {
483  printError( "Missing protocol." );
484  } else if ( protocol == "http" || protocol == "ftp" ) {
485  m_rdOnly = true;
486  } else if ( protocol == "file" ) {
487  m_rdOnly = false;
488  struct stat buff;
489  int exist = ::stat( path.c_str(), &buff ) != -1;
490  if ( create && !exist ) {
491  MsgStream log( m_msgSvc, "XMLCatalog" );
492  log << MSG::INFO << "File '" << path << "' does not exist. New file created." << endmsg;
493  ofstream out{ path };
494  if ( !m_rdOnly && out.is_open() ) {
495  out << (CSTR)EmptyCatalog << endl;
496  } else {
497  printError( "Problem creating file " + path );
498  }
499  out.close();
500  } else if ( exist ) {
501  return path;
502  } else if ( !create ) {
503  return "";
504  }
505  } else {
506  printError( protocol + ": protocol not supported." );
507  }
508  return path;
509 }

◆ getLFN()

void XMLFileCatalog::getLFN ( CSTR  fid,
Files &  files 
) const
override

Dump all logical file names of the catalog associate to the FileID.

Definition at line 257 of file XMLFileCatalog.cpp.

257  {
258  files.clear();
259  for ( XMLCollection c( child( child( element( fid, false ), LFNCOLL ), LFNNODE ), false ); c; ++c )
260  files.emplace_back( c.attr( Attr_name ), fid );
261 }

◆ getMetaData()

void XMLFileCatalog::getMetaData ( CSTR  fid,
Attributes &  attr 
) const
override

Dump all MetaData of the catalog for a given file ID.

Definition at line 263 of file XMLFileCatalog.cpp.

263  {
264  attr.clear();
265  for ( XMLCollection c( child( element( fid ), MetaNode ), false ); c; ++c )
266  attr.emplace_back( c.attr( Attr_metaName ), c.attr( Attr_metaValue ) );
267  if ( attr.size() > 0 ) attr.emplace_back( "guid", fid );
268 }

◆ getMetaDataItem()

string XMLFileCatalog::getMetaDataItem ( CSTR  fid,
CSTR  name 
) const
override

Access metadata item.

Definition at line 296 of file XMLFileCatalog.cpp.

296  {
297  XMLCollection c( child( getDoc( true )->getElementById( XMLStr( fid ) ), MetaNode, Attr_metaName, attr ) );
298  return c ? c.attr( attr ) : string( "" );
299 }

◆ getPFN()

void XMLFileCatalog::getPFN ( CSTR  fid,
Files &  files 
) const
override

Dump all physical file names of the catalog and their attributes associate to the FileID.

Definition at line 251 of file XMLFileCatalog.cpp.

251  {
252  files.clear();
253  for ( XMLCollection c( child( child( element( fid, false ), PFNCOLL ), PFNNODE ), false ); c; ++c )
254  files.emplace_back( c.attr( Attr_name ), c.attr( Attr_ftype ) );
255 }

◆ i_registerFID()

std::pair< DOMElement *, DOMElement * > XMLFileCatalog::i_registerFID ( CSTR  fid) const
private

It creates a new node File with name = fid in the XML file catalog

Definition at line 353 of file XMLFileCatalog.cpp.

353  {
354  if ( readOnly() ) {
355  printError( "Cannot update readonly catalog!" );
356  return { nullptr, nullptr };
357  }
358 
360  DOMElement * file = (DOMElement*)element( fid, false ), *phyelem = 0, *logelem = 0;
361  DOMDocument* doc = getDoc( true );
362  if ( !file ) {
363  DOMNode* fde = doc->getElementsByTagName( XMLStr( "*" ) )->item( 0 );
364  file = m_doc->createElement( XMLStr( "File" ) );
365  file->setAttribute( Attr_ID, XMLStr( fid ) );
366  file->setIdAttribute( Attr_ID, true );
367  fde->appendChild( file );
368  m_update = true;
369  }
370  for ( XMLCollection c1( file ); c1; ++c1 ) {
371  char* nam = XMLString::transcode( c1->getNodeName() );
372  if ( nam == PFNCOLL ) phyelem = c1;
373  if ( nam == LFNCOLL ) logelem = c1;
374  XMLString::release( &nam );
375  }
376  if ( !phyelem ) {
377  phyelem = doc->createElement( PFNCOLL );
378  file->appendChild( phyelem );
379  m_update = true;
380  }
381  if ( !logelem ) {
382  logelem = doc->createElement( LFNCOLL );
383  file->appendChild( logelem );
384  m_update = true;
385  }
386  return { logelem, phyelem };
387 }

◆ init()

void XMLFileCatalog::init ( )
override

Parse the DOM tree of the XML catalog.

Definition at line 205 of file XMLFileCatalog.cpp.

205  {
206  string xmlFile = getfile( false );
207  try {
208  m_parser = std::make_unique<XercesDOMParser>();
209  m_parser->setValidationScheme( XercesDOMParser::Val_Auto );
210  m_parser->setDoNamespaces( false );
211  DTDRedirect dtdinmem;
212  m_parser->setEntityResolver( &dtdinmem );
213  if ( !m_errHdlr ) m_errHdlr = std::make_unique<ErrHandler>( m_msgSvc );
214  m_parser->setErrorHandler( m_errHdlr.get() );
215  if ( !xmlFile.empty() ) {
216  m_parser->parse( xmlFile.c_str() );
217  } else {
218  const std::string& s = EmptyCatalog;
219  MemBufInputSource src( (const XMLByte*)s.c_str(), s.length(), "MemCatalog" );
220  m_parser->parse( src );
221  }
222  m_doc = m_parser->getDocument();
223  } catch ( const XMLException& e ) {
224  printError( "XML parse error[" + xmlFile + "]: " + _toString( e.getMessage() ) );
225  } catch ( const DOMException& e ) {
226  printError( "XML parse error[" + xmlFile + "]: " + _toString( e.getMessage() ) );
227  } catch ( ... ) { printError( "UNKNOWN XML parse error in file " + xmlFile ); }
228 }

◆ lookupFID()

string XMLFileCatalog::lookupFID ( CSTR  lfn) const
private

Definition at line 230 of file XMLFileCatalog.cpp.

230  {
231  std::string result;
232  DOMNode* e = element( fid, false );
233  e = e ? e->getParentNode() : 0; // Mode up to <logical>
234  e = e ? e->getParentNode() : 0; // Mode up to <File>
235  if ( e ) {
236  if ( e->getAttributes() ) { // Need to check this. The node may be no DOMElement
237  char* nam = XMLString::transcode( ( (DOMElement*)e )->getAttribute( Attr_ID ) );
238  if ( nam ) result = nam;
239  XMLString::release( &nam );
240  }
241  }
242  return result;
243 }

◆ lookupLFN()

std::string Gaudi::XMLFileCatalog::lookupLFN ( CSTR  lfn) const
inlineoverride

Lookup file identifier by logical file name.

Definition at line 69 of file XMLFileCatalog.h.

69 { return lookupFID( lfn ); }

◆ lookupPFN()

std::string Gaudi::XMLFileCatalog::lookupPFN ( CSTR  fid) const
inlineoverride

Lookup file identifier by physical file name.

Definition at line 65 of file XMLFileCatalog.h.

65 { return lookupFID( fid ); }

◆ printError()

void XMLFileCatalog::printError ( CSTR  msg,
bool  throw_exc = true 
) const
private

Definition at line 199 of file XMLFileCatalog.cpp.

199  {
200  MsgStream log( m_msgSvc, "XMLCatalog" );
201  log << MSG::FATAL << msg << endmsg;
202  if ( rethrow ) throw runtime_error( "XMLFileCatalog> " + msg );
203 }

◆ readOnly()

bool Gaudi::XMLFileCatalog::readOnly ( ) const
inlineoverride

Check if the catalog is read-only.

Definition at line 59 of file XMLFileCatalog.h.

59 { return m_rdOnly; }

◆ registerFID()

void XMLFileCatalog::registerFID ( CSTR  fid) const
override

Create a FileID and Node.

Definition at line 321 of file XMLFileCatalog.cpp.

321  {
322  if ( !fid.empty() ) {
324  if ( res.first == 0 || res.second == 0 ) { printError( "Failed to register FID:" + fid ); }
325  return;
326  }
327  throw runtime_error( "XMLFileCatalog> Cannot register LFN for invalid FID:" + fid );
328 }

◆ registerLFN()

void XMLFileCatalog::registerLFN ( CSTR  fid,
CSTR  lfn 
) const
override

Create a FileID and Node of the logical file name with all the attributes.

Definition at line 419 of file XMLFileCatalog.cpp.

419  {
420  if ( !fid.empty() ) {
422  DOMElement * logelem = res.first, *fnelem = 0;
423  for ( XMLCollection c( logelem ); c; ++c ) {
424  char* nam = XMLString::transcode( c->getNodeName() );
425  if ( nam == LFNNODE ) {
426  XMLString::release( &nam );
427  nam = XMLString::transcode( c->getAttribute( Attr_name ) );
428  if ( nam == lfn ) {
429  XMLString::release( &nam );
430  fnelem = c;
431  break;
432  }
433  }
434  }
435  if ( !fnelem ) {
436  fnelem = getDoc( true )->createElement( LFNNODE );
437  logelem->appendChild( fnelem );
438  fnelem->setAttribute( Attr_name, XMLStr( lfn ) );
439  fnelem->setIdAttribute( Attr_name, true );
440  m_update = true;
441  }
442  return;
443  }
444  throw runtime_error( "XMLFileCatalog> Cannot register LFN for invalid FID:" + fid );
445 }

◆ registerPFN()

void XMLFileCatalog::registerPFN ( CSTR  fid,
CSTR  pfn,
CSTR  ftype 
) const
override

Create a FileID and Node of the physical file name with all the attributes.

Definition at line 389 of file XMLFileCatalog.cpp.

389  {
390  if ( !fid.empty() ) {
392  DOMElement * phyelem = res.second, *fnelem = 0;
393  for ( XMLCollection c( phyelem ); c; ++c ) {
394  char* nam = XMLString::transcode( c->getNodeName() );
395  if ( nam == PFNNODE ) {
396  XMLString::release( &nam );
397  nam = XMLString::transcode( c->getAttribute( Attr_name ) );
398  if ( nam == pfn ) {
399  XMLString::release( &nam );
400  fnelem = c;
401  break;
402  }
403  }
404  XMLString::release( &nam );
405  }
406  if ( !fnelem ) {
407  fnelem = getDoc( true )->createElement( PFNNODE );
408  phyelem->appendChild( fnelem );
409  fnelem->setAttribute( Attr_ftype, XMLStr( ftype ) );
410  fnelem->setAttribute( Attr_name, XMLStr( pfn ) );
411  fnelem->setIdAttribute( Attr_name, true );
412  m_update = true;
413  }
414  return;
415  }
416  throw runtime_error( "XMLFileCatalog> Cannot register PFN for invalid FID:" + fid );
417 }

◆ renamePFN()

void XMLFileCatalog::renamePFN ( CSTR  pfn,
CSTR  new_pfn 
) const
override

rename a PFN

Definition at line 330 of file XMLFileCatalog.cpp.

330  {
331  DOMNode* node = getDoc( true )->getElementById( XMLStr( pfn ) );
332  if ( node && node->getNodeType() == DOMNode::ELEMENT_NODE ) {
333  ( (DOMElement*)node )->setAttribute( Attr_name, XMLStr( new_pfn ) );
334  m_update = true;
335  }
336 }

◆ rollback()

void Gaudi::XMLFileCatalog::rollback ( )
inlineoverride

Save DOM catalog to file.

Definition at line 55 of file XMLFileCatalog.h.

55  {
56  if ( dirty() ) init();
57  }

◆ setMetaData()

void XMLFileCatalog::setMetaData ( CSTR  fid,
CSTR  name,
CSTR  value 
) const
override

Insert/update metadata item.

Definition at line 280 of file XMLFileCatalog.cpp.

280  {
281  if ( !readOnly() ) {
282  DOMNode* node = element( fid );
283  DOMElement* mnod = (DOMElement*)child( node, MetaNode, Attr_metaName, attr );
284  if ( !mnod ) {
285  mnod = getDoc( true )->createElement( MetaNode );
286  node->appendChild( mnod );
287  mnod->setAttribute( Attr_metaName, XMLStr( attr ) );
288  }
289  mnod->setAttribute( Attr_metaValue, XMLStr( val ) );
290  m_update = true;
291  return;
292  }
293  printError( "Cannot update readonly catalog!" );
294 }

Member Data Documentation

◆ m_doc

xercesc::DOMDocument* Gaudi::XMLFileCatalog::m_doc = nullptr
private

Definition at line 111 of file XMLFileCatalog.h.

◆ m_errHdlr

std::unique_ptr<xercesc::ErrorHandler> Gaudi::XMLFileCatalog::m_errHdlr
private

Definition at line 113 of file XMLFileCatalog.h.

◆ m_file

std::string Gaudi::XMLFileCatalog::m_file
private

Definition at line 114 of file XMLFileCatalog.h.

◆ m_msgSvc

IMessageSvc* Gaudi::XMLFileCatalog::m_msgSvc
private

Definition at line 115 of file XMLFileCatalog.h.

◆ m_parser

std::unique_ptr<xercesc::XercesDOMParser> Gaudi::XMLFileCatalog::m_parser
private

Definition at line 112 of file XMLFileCatalog.h.

◆ m_rdOnly

bool Gaudi::XMLFileCatalog::m_rdOnly = false
private

Definition at line 109 of file XMLFileCatalog.h.

◆ m_update

bool Gaudi::XMLFileCatalog::m_update = false
mutableprivate

Definition at line 110 of file XMLFileCatalog.h.


The documentation for this class was generated from the following files:
std::string
STL class.
Gaudi.Configuration.log
log
Definition: Configuration.py:28
std::exception
STL class.
GaudiAlg.HistoUtils.path
path
Definition: HistoUtils.py:960
Gaudi::XMLFileCatalog::m_parser
std::unique_ptr< xercesc::XercesDOMParser > m_parser
Definition: XMLFileCatalog.h:112
MSG::INFO
@ INFO
Definition: IMessageSvc.h:25
std::pair
Gaudi::XMLFileCatalog::child
xercesc::DOMNode * child(xercesc::DOMNode *par, CSTR tag, CSTR attr="", CSTR val="") const
Definition: XMLFileCatalog.cpp:270
gaudirun.s
string s
Definition: gaudirun.py:346
std::vector
STL class.
std::string::length
T length(T... args)
GaudiMP.FdsRegistry.msg
msg
Definition: FdsRegistry.py:19
std::unique_ptr::get
T get(T... args)
conf.release
string release
Definition: conf.py:27
gaudirun.c
c
Definition: gaudirun.py:525
gaudirun.output
output
Definition: gaudirun.py:521
std::vector::push_back
T push_back(T... args)
Gaudi::XMLFileCatalog::m_msgSvc
IMessageSvc * m_msgSvc
Definition: XMLFileCatalog.h:115
compareOutputFiles.par
par
Definition: compareOutputFiles.py:477
Gaudi::XMLFileCatalog::getfile
std::string getfile(bool create)
Definition: XMLFileCatalog.cpp:474
Gaudi::Units::m
constexpr double m
Definition: SystemOfUnits.h:108
Gaudi::XMLFileCatalog::dropMetaData
void dropMetaData(CSTR fid) const override
Drop all metadata of one FID.
Definition: XMLFileCatalog.h:97
std::ofstream
STL class.
Gaudi::XMLFileCatalog::dirty
bool dirty() const override
Check if the catalog should be updated.
Definition: XMLFileCatalog.h:61
Gaudi::XMLFileCatalog::m_doc
xercesc::DOMDocument * m_doc
Definition: XMLFileCatalog.h:111
std::string::c_str
T c_str(T... args)
Gaudi::XMLFileCatalog::i_registerFID
std::pair< xercesc::DOMElement *, xercesc::DOMElement * > i_registerFID(CSTR fid) const
Definition: XMLFileCatalog.cpp:353
Gaudi::XMLFileCatalog::m_rdOnly
bool m_rdOnly
Definition: XMLFileCatalog.h:109
Gaudi::XMLFileCatalog::element
xercesc::DOMNode * element(CSTR fid, bool print_err=true) const
Definition: XMLFileCatalog.cpp:309
std::runtime_error
STL class.
Gaudi::XMLFileCatalog::readOnly
bool readOnly() const override
Check if the catalog is read-only.
Definition: XMLFileCatalog.h:59
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:203
MsgStream
Definition: MsgStream.h:34
MSG::FATAL
@ FATAL
Definition: IMessageSvc.h:25
Gaudi::XMLFileCatalog::printError
void printError(CSTR msg, bool throw_exc=true) const
Definition: XMLFileCatalog.cpp:199
Gaudi::XMLFileCatalog::CSTR
const std::string & CSTR
Definition: XMLFileCatalog.h:39
AlgSequencer.c1
c1
Definition: AlgSequencer.py:32
Gaudi::XMLFileCatalog::init
void init() override
Parse the DOM tree of the XML catalog.
Definition: XMLFileCatalog.cpp:205
Gaudi::createGuidAsString
std::string createGuidAsString()
Helper function creating file identifier using the UUID mechanism.
std::string::empty
T empty(T... args)
Gaudi::XMLFileCatalog::getDoc
xercesc::DOMDocument * getDoc(bool throw_if_no_exists=true) const
Definition: XMLFileCatalog.cpp:194
Gaudi::XMLFileCatalog::m_update
bool m_update
Definition: XMLFileCatalog.h:110
Gaudi::XMLFileCatalog::m_file
std::string m_file
Definition: XMLFileCatalog.h:114
Gaudi::XMLFileCatalog::m_errHdlr
std::unique_ptr< xercesc::ErrorHandler > m_errHdlr
Definition: XMLFileCatalog.h:113
std::exception::what
T what(T... args)
Gaudi::XMLFileCatalog::lookupFID
std::string lookupFID(CSTR lfn) const
Definition: XMLFileCatalog.cpp:230
PrepareBase.out
out
Definition: PrepareBase.py:20