| # Gaudi Framework, version v20r3
Generated: 24 Nov 2008

# Gaudi::MultiFileCatalog Class Reference

`#include <MultiFileCatalog.h>`

Inheritance diagram for Gaudi::MultiFileCatalog:

[legend]
Collaboration diagram for Gaudi::MultiFileCatalog:

[legend]

List of all members.

## Detailed Description

This class constitutes the core of the XML based FileCatalog API for using POOL within Gaudi.

This class manages multiple file catalogs.

Definition at line 20 of file MultiFileCatalog.h.

## Public Member Functions
| MultiFileCatalog (const std::string &nam, ISvcLocator *svc)
| Create a catalog file, initialization of XercesC.
virtual | ~MultiFileCatalog ()
| Destructor,.
virtual StatusCode | queryInterface (const InterfaceID &id, void **ppv)
| IInterface implementation.
virtual StatusCode | initialize ()
| IService implementation.
virtual StatusCode | finalize ()
| Finalize service object.
virtual std::string | createFID () const
| Catalog interface.
virtual CSTR | connectInfo () const
| Access to connect string.
virtual void | init ()
| Parse the DOM tree of the XML catalog.
virtual void | commit ()
| Save DOM catalog to file.
virtual void | rollback ()
| Save DOM catalog to file.
virtual bool | readOnly () const
| Check if the catalog is read-only.
virtual bool | dirty () const
| Check if the catalog should be updated.
virtual bool | existsPFN (CSTR pfn) const
| Return the status of physical file name.
virtual std::string | lookupPFN (CSTR pfn) const
| Lookup file identifier by physical file name.
virtual bool | existsLFN (CSTR lfn) const
| Return the status of a logical file name.
virtual std::string | lookupLFN (CSTR lfn) const
| Lookup file identifier by logical file name.
virtual bool | existsFID (CSTR fid) const
| Return the status of a FileID.
virtual void | getPFN (CSTR fid, Files &files) const
| Dump all physical file names of the catalog and their attributes associate to the FileID.
virtual void | getLFN (CSTR fid, Files &files) const
| Dump all logical file names of the catalog associate to the FileID.
virtual void | getFID (Strings &fids) const
| Dump all file Identifiers.
virtual void | deleteFID (CSTR fid) const
| Delete FileID from the catalog.
virtual void | registerPFN (CSTR fid, CSTR pfn, CSTR ftype) const
| Create a FileID and DOM Node of the PFN with all the attributes.
virtual void | registerLFN (CSTR fid, CSTR lfn) const
| Create a FileID and DOM Node of the LFN with all the attributes.
virtual void | registerFID (CSTR fid) const
| Create a FileID and DOM Node.
virtual void | getMetaData (CSTR fid, Attributes &attr) const
| Dump all MetaData of the catalog for a given file ID.
virtual std::string | getMetaDataItem (CSTR fid, CSTR name) const
| Access metadata item.
virtual void | setMetaData (CSTR fid, CSTR attr, CSTR val) const
| Insert/update metadata item.
virtual void | dropMetaData (CSTR fid) const
| Drop all metadata of one FID.
virtual void | dropMetaData (CSTR fid, CSTR attr) const
| Drop specified metadata item.
virtual IFileCatalog * | findCatalog (CSTR connect, bool must_be_writable) const
| Catalog management.
virtual void | addCatalog (CSTR connect)
| Add new catalog identified by name to the existing ones.
virtual void | addCatalog (IFileCatalog *cat)
| Add new catalog identified by reference to the existing ones.
virtual void | removeCatalog (CSTR connect)
| Remove catalog identified by name from the existing ones.
virtual void | removeCatalog (const IFileCatalog *cat)
| Remove catalog identified by reference from the existing ones.
virtual Catalogs & | catalogs ()
| Access catalog container.
virtual const Catalogs & | catalogs () const
| Access catalog container (CONST).
virtual IFileCatalog * | writeCatalog (CSTR fid="") const
| Access to the (first) writable file catalog.
virtual void | setWriteCatalog (IFileCatalog *cat)
| Define the writable catalog identified by reference.
virtual void | setWriteCatalog (CSTR connect)
| Define the writable catalog identified by name.
## Protected Types
typedef const std::string & | CSTR
typedef std::vector < IFileCatalog * > | Catalogs
| Public type definitions.
typedef std::vector< std::string > | CatalogNames
## Protected Member Functions
template<class T>
void | _exec (T pmf) const
template<class A1, class F>
std::string | _find (A1 &arg1, F pmf) const
template<class A1, class F>
void | _collect (A1 arg1, F pmf) const
template<class A1, class A2, class F>
void | _collect (A1 arg1, A2 &arg2, F pmf) const
## Private Member Functions
IFileCatalog * | getCatalog (CSTR fid, bool throw_if_not, bool writable=true, bool prt=true) const
| Find catalog containing a given file identifier.
Catalogs::iterator | i_findCatalog (CSTR connect, bool must_be_writable)
| Find catalog by connect string.
void | propHandler (Property &)
| simple property handle to allow interactive modification of list of the file catalogs
void | printError (CSTR msg, bool throw_exc=true) const
std::string | lookupFID (CSTR lfn) const
## Private Attributes
Catalogs | m_catalogs
| Container with references to known catalogs.
CatalogNames | m_catalogNames
| Property : Container with catalog names.
bool | m_started
| Flag to indicate if catalog is started.
CatalogNames | m_oldNames
| BACKUP:: Container with catalog names.

## Member Typedef Documentation

typedef const std::string& Gaudi::MultiFileCatalog::CSTR`[protected]`

Definition at line 26 of file MultiFileCatalog.h.

typedef std::vector<IFileCatalog*> Gaudi::MultiFileCatalog::Catalogs`[protected]`

Public type definitions.

Reimplemented from Gaudi::IFileCatalogMgr.

Definition at line 27 of file MultiFileCatalog.h.

typedef std::vector<std::string> Gaudi::MultiFileCatalog::CatalogNames`[protected]`

Definition at line 28 of file MultiFileCatalog.h.

## Constructor & Destructor Documentation

MultiFileCatalog::MultiFileCatalog | ( | const std::string & | nam,
|  | ISvcLocator * | svc |
| ) |  |  |

Create a catalog file, initialization of XercesC.

Definition at line 27 of file MultiFileCatalog.cpp.

    00028   : Service(nam, svc), m_started(false), m_oldNames()
    00029 {
    00030   declareProperty("Catalogs", m_catalogNames, "The list of Catalogs")
    00031     -> declareUpdateHandler ( &Gaudi::MultiFileCatalog::propHandler, this ) ;
    00032   m_catalogNames.push_back("xmlcatalog_file:test_catalog.xml");
    00033 }

MultiFileCatalog::~MultiFileCatalog | ( |  | ) | `[virtual]`

Destructor,.

Definition at line 35 of file MultiFileCatalog.cpp.

    00035                                       {
    00036 }

## Member Function Documentation

template<class T>

void Gaudi::MultiFileCatalog::_exec | ( | T | pmf | ) | const`[inline, protected]`

Definition at line 30 of file MultiFileCatalog.h.

    00030                                                  {
    00031       for(Catalogs::const_iterator i=m_catalogs.begin(); i != m_catalogs.end(); ++i)
    00032         ((*i)->*pmf)();
    00033     }

template<class A1, class F>

std::string Gaudi::MultiFileCatalog::_find | ( | A1 & | arg1,
|  | F | pmf |
| ) |  |  | const`[inline, protected]`

Definition at line 34 of file MultiFileCatalog.h.

    00034                                                                        {
    00035       std::string result;
    00036       for(Catalogs::const_iterator i=m_catalogs.begin(); i != m_catalogs.end(); ++i)
    00037         if ( !(result= ((*i)->*pmf)(arg1)).empty() ) break;
    00038       return result;
    00039     }

template<class A1, class F>

void Gaudi::MultiFileCatalog::_collect | ( | A1 | arg1,
|  | F | pmf |
| ) |  |  | const`[inline, protected]`

Definition at line 40 of file MultiFileCatalog.h.

    00040                                                                     {
    00041       A1 tmp;
    00042       for(Catalogs::const_iterator i=m_catalogs.begin();i!=m_catalogs.end();++i,tmp.clear()) {
    00043         ((*i)->*pmf)(tmp);
    00044         arg1.insert(arg1.end(),tmp.begin(),tmp.end());
    00045       }
    00046     }

template<class A1, class A2, class F>

void Gaudi::MultiFileCatalog::_collect | ( | A1 | arg1,
|  | A2 & | arg2,
|  | F | pmf |
| ) |  |  | const`[inline, protected]`

Definition at line 47 of file MultiFileCatalog.h.

    00047                                                                                       {
    00048       A2 tmp;
    00049       for(Catalogs::const_iterator i=m_catalogs.begin();i!=m_catalogs.end();++i,tmp.clear()) {
    00050         ((*i)->*pmf)(arg1,tmp);
    00051         arg2.insert(arg2.end(),tmp.begin(),tmp.end());
    00052       }
    00053     }

StatusCode MultiFileCatalog::queryInterface | ( | const InterfaceID & | id,
|  | void ** | ppv |
| ) |  |  | `[virtual]`

IInterface implementation.

Reimplemented from Service.

Definition at line 67 of file MultiFileCatalog.cpp.

    00067                                                                                 {
    00068   if ( riid.versionMatch(IFileCatalog::interfaceID()) )
    00069     *ppv = (IFileCatalog*)this;
    00070   else if ( riid.versionMatch(IFileCatalogMgr::interfaceID()) )
    00071     *ppv = (IFileCatalogMgr*)this;
    00072   else
    00073     return Service::queryInterface(riid,ppv);
    00074   *ppv = (IFileCatalog*)this;
    00075   addRef();
    00076   return StatusCode::SUCCESS;
    00077 }

StatusCode MultiFileCatalog::initialize | ( |  | ) | `[virtual]`

IService implementation.

Finalize service object

Reimplemented from Service.

Definition at line 38 of file MultiFileCatalog.cpp.

    00038                                          {
    00039   CatalogNames::const_iterator i;
    00040   std::string current = "";
    00041   if ( !Service::initialize().isSuccess() )  {
    00042     printError("Failed to initialize service base class.",false);
    00043     return StatusCode::SUCCESS;
    00044   }
    00045   try {
    00046     for(i=m_catalogNames.begin(); i != m_catalogNames.end(); ++i)  {
    00047       current = *i;
    00048       addCatalog(*i);
    00049     }
    00050     init();
    00051     return StatusCode::SUCCESS;
    00052   }
    00053   catch(const std::exception& /* e */)  {
    00054     printError("Cannot add file catalog:"+current,false);
    00055   }
    00056   return StatusCode::FAILURE;
    00057 }

StatusCode MultiFileCatalog::finalize | ( | void |  | ) | `[virtual]`

Finalize service object.

Reimplemented from Service.

Definition at line 59 of file MultiFileCatalog.cpp.

    00059                                        {
    00060   commit();
    00061   _exec(&IFileCatalog::release);
    00062   m_catalogs.clear();
    00063   m_started = false;
    00064   return Service::finalize();
    00065 }

std::string MultiFileCatalog::createFID | ( |  | ) | const`[virtual]`

Catalog interface.

Create file identifier using UUID mechanism.

Create file identifier using UUID mechanism

Implements Gaudi::IFileCatalog.

Definition at line 79 of file MultiFileCatalog.cpp.

    00079                                              {
    00080   return createGuidAsString();
    00081 }

MultiFileCatalog::CSTR MultiFileCatalog::connectInfo | ( |  | ) | const`[virtual]`

Access to connect string.

Implements Gaudi::IFileCatalog.

Definition at line 83 of file MultiFileCatalog.cpp.

    00083                                                          {
    00084   static string s("MultiCatalog");
    00085   return s;
    00086 }

virtual void Gaudi::MultiFileCatalog::init | ( |  | ) | `[inline, virtual]`

Parse the DOM tree of the XML catalog.

Implements Gaudi::IFileCatalog.

Definition at line 75 of file MultiFileCatalog.h.

    00076     {  _exec(&IFileCatalog::init); m_started=true;                           }

virtual void Gaudi::MultiFileCatalog::commit | ( |  | ) | `[inline, virtual]`

Save DOM catalog to file.

Implements Gaudi::IFileCatalog.

Definition at line 78 of file MultiFileCatalog.h.

    00078 { _exec(&IFileCatalog::commit);   }

virtual void Gaudi::MultiFileCatalog::rollback | ( |  | ) | `[inline, virtual]`

Save DOM catalog to file.

Implements Gaudi::IFileCatalog.

Definition at line 80 of file MultiFileCatalog.h.

    00080 { _exec(&IFileCatalog::rollback); }

bool MultiFileCatalog::readOnly | ( |  | ) | const`[virtual]`

Check if the catalog is read-only.

Implements Gaudi::IFileCatalog.

Definition at line 250 of file MultiFileCatalog.cpp.

    00251 {  return _findX0Bool(m_catalogs,&IFileCatalog::readOnly,false);              }

bool MultiFileCatalog::dirty | ( |  | ) | const`[virtual]`

Check if the catalog should be updated.

Implements Gaudi::IFileCatalog.

Definition at line 253 of file MultiFileCatalog.cpp.

    00254 {  return _findX0Bool(m_catalogs,&IFileCatalog::dirty,true);                  }

virtual bool Gaudi::MultiFileCatalog::existsPFN | ( | CSTR | pfn | ) | const`[inline, virtual]`

Return the status of physical file name.

Implements Gaudi::IFileCatalog.

Definition at line 86 of file MultiFileCatalog.h.

    00087     { return !lookupPFN(pfn).empty();                                         }

virtual std::string Gaudi::MultiFileCatalog::lookupPFN | ( | CSTR | pfn | ) | const`[inline, virtual]`

Lookup file identifier by physical file name.

Implements Gaudi::IFileCatalog.

Definition at line 89 of file MultiFileCatalog.h.

    00090     {  return _find(pfn,&IFileCatalog::lookupPFN);                            }

virtual bool Gaudi::MultiFileCatalog::existsLFN | ( | CSTR | lfn | ) | const`[inline, virtual]`

Return the status of a logical file name.

Implements Gaudi::IFileCatalog.

Definition at line 92 of file MultiFileCatalog.h.

    00093     { return !lookupLFN(lfn).empty();                                         }

virtual std::string Gaudi::MultiFileCatalog::lookupLFN | ( | CSTR | lfn | ) | const`[inline, virtual]`

Lookup file identifier by logical file name.

Implements Gaudi::IFileCatalog.

Definition at line 95 of file MultiFileCatalog.h.

    00096     {  return _find(lfn,&IFileCatalog::lookupLFN);                            }

virtual bool Gaudi::MultiFileCatalog::existsFID | ( | CSTR | fid | ) | const`[inline, virtual]`

Return the status of a FileID.

Implements Gaudi::IFileCatalog.

Definition at line 98 of file MultiFileCatalog.h.

    00099     {  return 0 != getCatalog(fid,false,false,false);                          }

virtual void Gaudi::MultiFileCatalog::getPFN | ( | CSTR | fid,
|  | Files & | files |
| ) |  |  | const`[inline, virtual]`

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

Definition at line 101 of file MultiFileCatalog.h.

    00102     {  _collect(fid,files,&IFileCatalog::getPFN);                             }

virtual void Gaudi::MultiFileCatalog::getLFN | ( | CSTR | fid,
|  | Files & | files |
| ) |  |  | const`[inline, virtual]`

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

Definition at line 104 of file MultiFileCatalog.h.

    00105     {  _collect(fid,files,&IFileCatalog::getLFN);                             }

virtual void Gaudi::MultiFileCatalog::getFID | ( | Strings & | fids | ) | const`[inline, virtual]`

Dump all file Identifiers.

Definition at line 108 of file MultiFileCatalog.h.

    00109     {  _collect(fids,&IFileCatalog::getFID);                                  }

virtual void Gaudi::MultiFileCatalog::deleteFID | ( | CSTR | fid | ) | const`[inline, virtual]`

Delete FileID from the catalog.

Implements Gaudi::IFileCatalog.

Definition at line 111 of file MultiFileCatalog.h.

    00112     {  writeCatalog(fid)->deleteFID(fid);                                     }

void MultiFileCatalog::registerPFN | ( | CSTR | fid,
|  | CSTR | pfn,
|  | CSTR | ftype |
| ) |  |  | const`[virtual]`

Create a FileID and DOM Node of the PFN with all the attributes.

Implements Gaudi::IFileCatalog.

Definition at line 238 of file MultiFileCatalog.cpp.

    00238                                                                        {
    00239   IFileCatalog* c = getCatalog(fid,false,true,false);
    00240   if ( !c ) c = getCatalog("",true,true,true);
    00241   c->registerPFN(fid, pfn, ftype);
    00242 }

void MultiFileCatalog::registerLFN | ( | CSTR | fid,
|  | CSTR | lfn |
| ) |  |  | const`[virtual]`

Create a FileID and DOM Node of the LFN with all the attributes.

Implements Gaudi::IFileCatalog.

Definition at line 244 of file MultiFileCatalog.cpp.

    00244                                                             {
    00245   IFileCatalog* c = getCatalog(fid,false,true,false);
    00246   if ( !c ) c = getCatalog("",true,true,true);
    00247   c->registerLFN(fid, lfn);
    00248 }

virtual void Gaudi::MultiFileCatalog::registerFID | ( | CSTR | fid | ) | const`[inline, virtual]`

Create a FileID and DOM Node.

Implements Gaudi::IFileCatalog.

Definition at line 118 of file MultiFileCatalog.h.

    00119     {  writeCatalog()->registerFID(fid);                                      }

virtual void Gaudi::MultiFileCatalog::getMetaData | ( | CSTR | fid,
|  | Attributes & | attr |
| ) |  |  | const`[inline, virtual]`

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

Definition at line 121 of file MultiFileCatalog.h.

    00122     {  _collect(fid,attr,&IFileCatalog::getMetaData);                         }

string MultiFileCatalog::getMetaDataItem | ( | CSTR | fid,
|  | CSTR | name |
| ) |  |  | const`[virtual]`

Access metadata item.

Implements Gaudi::IFileCatalog.

Definition at line 231 of file MultiFileCatalog.cpp.

    00231                                                                   {
    00232   std::string result;
    00233   for(Catalogs::const_iterator i=m_catalogs.begin(); i != m_catalogs.end(); ++i)
    00234     if ( !(result= (*i)->getMetaDataItem(fid,attr)).empty() ) break;
    00235   return result;
    00236 }

virtual void Gaudi::MultiFileCatalog::setMetaData | ( | CSTR | fid,
|  | CSTR | attr,
|  | CSTR | val |
| ) |  |  | const`[inline, virtual]`

Insert/update metadata item.

Implements Gaudi::IFileCatalog.

Definition at line 126 of file MultiFileCatalog.h.

    00127     {  writeCatalog(fid)->setMetaData(fid,attr,val);                          }

virtual void Gaudi::MultiFileCatalog::dropMetaData | ( | CSTR | fid | ) | const`[inline, virtual]`

Drop all metadata of one FID.

Implements Gaudi::IFileCatalog.

Definition at line 129 of file MultiFileCatalog.h.

    00130     {  writeCatalog(fid)->dropMetaData(fid);                                  }

virtual void Gaudi::MultiFileCatalog::dropMetaData | ( | CSTR | fid,
|  | CSTR | attr |
| ) |  |  | const`[inline, virtual]`

Drop specified metadata item.

Implements Gaudi::IFileCatalog.

Definition at line 132 of file MultiFileCatalog.h.

    00133     {  writeCatalog(fid)->dropMetaData(fid,attr);                             }

IFileCatalog * MultiFileCatalog::findCatalog | ( | CSTR | connect,
|  | bool | must_be_writable |
| ) |  |  | const`[virtual]`

Catalog management.

Find catalog by connect string

Implements Gaudi::IFileCatalogMgr.

Definition at line 114 of file MultiFileCatalog.cpp.

    00114                                                                                       {
    00115   for(Catalogs::const_iterator i=m_catalogs.begin(); i != m_catalogs.end(); ++i) {
    00116     if ( connect == (*i)->connectInfo() )
    00117       return (must_be_writable && (*i)->readOnly()) ? 0 : *i;
    00118   }
    00119   return 0;
    00120 }

void MultiFileCatalog::addCatalog | ( | CSTR | connect | ) | `[virtual]`

Add new catalog identified by name to the existing ones.

Catalog is already present ... silently ignore request

Implements Gaudi::IFileCatalogMgr.

Definition at line 141 of file MultiFileCatalog.cpp.

    00141                                            {
    00142   if ( !con.empty() )  {
    00143     if ( 0 == findCatalog(con,false) )  {
    00144       static string xml_typ = "Gaudi::XMLFileCatalog";
    00145       string::size_type id0 = con.find("_");
    00146       string typ = con.substr(0,id0);
    00147       string url = con.substr(id0+1);
    00148       IInterface* cat = 0;
    00149       if ( strncasecmp("xml",typ.c_str(),3) == 0 )    {
    00150         cat = PluginService::Create<IInterface*>(xml_typ,url,msgSvc());
    00151       }
    00152       else    {
    00153         cat = PluginService::Create<IInterface*>(typ,url,serviceLocator());
    00154         if ( !cat )  {
    00155           cat = PluginService::Create<IInterface*>(typ,url,msgSvc());
    00156         }
    00157       }
    00158       if ( cat )  {
    00159         IFileCatalog* fileCat = 0;
    00160         if ( cat->queryInterface(IFileCatalog::interfaceID(),pp_cast<void>(&fileCat)).isSuccess() ) {
    00161           addCatalog(fileCat);
    00162           cat->release();
    00163           return;
    00164         }
    00165       }
    00166       printError("Failed to create catalog connection:"+con,true);
    00167     }
    00169     return;
    00170   }
    00171   printError("Got invalid (empty) catalog connection string.",true);
    00172 }

void MultiFileCatalog::addCatalog | ( | IFileCatalog * | cat | ) | `[virtual]`

Add new catalog identified by reference to the existing ones.

Implements Gaudi::IFileCatalogMgr.

Definition at line 174 of file MultiFileCatalog.cpp.

    00174                                                     {
    00175   if ( cat )  {
    00176     cat->addRef();
    00177     m_catalogs.push_back(cat);
    00178     return;
    00179   }
    00180   printError("Got invalid catalog to be added to multi catalog.",true);
    00181 }

void MultiFileCatalog::removeCatalog | ( | CSTR | connect | ) | `[virtual]`

Remove catalog identified by name from the existing ones.

Implements Gaudi::IFileCatalogMgr.

Definition at line 183 of file MultiFileCatalog.cpp.

    00183                                               {
    00184   if ( con.empty() || con == "*" )  {
    00185     _exec(&IFileCatalog::release);
    00186     m_catalogs.clear();
    00187     return;
    00188   }
    00189   removeCatalog(findCatalog(con,false));
    00190 }

void MultiFileCatalog::removeCatalog | ( | const IFileCatalog * | cat | ) | `[virtual]`

Remove catalog identified by reference from the existing ones.

Implements Gaudi::IFileCatalogMgr.

Definition at line 192 of file MultiFileCatalog.cpp.

    00192                                                              {
    00193   if ( cat )  {
    00194     Catalogs::iterator i=find(m_catalogs.begin(),m_catalogs.end(),cat);
    00195     if ( i != m_catalogs.end() )  {
    00196       (*i)->release();
    00197       m_catalogs.erase(i);
    00198       return;
    00199     }
    00200     printError("Unknown file catalog -- cannot be removed.",true);
    00201   }
    00202   printError("Invalid file catalog.",true);
    00203 }

virtual Catalogs& Gaudi::MultiFileCatalog::catalogs | ( |  | ) | `[inline, virtual]`

Access catalog container.

Implements Gaudi::IFileCatalogMgr.

Definition at line 147 of file MultiFileCatalog.h.

    00147 { return m_catalogs;      }

virtual const Catalogs& Gaudi::MultiFileCatalog::catalogs | ( |  | ) | const`[inline, virtual]`

Access catalog container (CONST).

Implements Gaudi::IFileCatalogMgr.

Definition at line 149 of file MultiFileCatalog.h.

    00149 { return m_catalogs;      }

virtual IFileCatalog* Gaudi::MultiFileCatalog::writeCatalog | ( | CSTR | fid = `""` | ) | const`[inline, virtual]`

Access to the (first) writable file catalog.

Implements Gaudi::IFileCatalogMgr.

Definition at line 151 of file MultiFileCatalog.h.

    00152     {  return getCatalog(fid,true,true,false);                                }

void MultiFileCatalog::setWriteCatalog | ( | IFileCatalog * | cat | ) | `[virtual]`

Define the writable catalog identified by reference.

Implements Gaudi::IFileCatalogMgr.

Definition at line 205 of file MultiFileCatalog.cpp.

    00205                                                          {
    00206   if ( cat )  {
    00207     if ( !cat->readOnly() )  {
    00208       Catalogs::iterator i=find(m_catalogs.begin(),m_catalogs.end(),cat);
    00209       if ( i != m_catalogs.end() )  {
    00210         m_catalogs.erase(i);
    00211         m_catalogs.insert(m_catalogs.begin(),cat);
    00212         return;
    00213       }
    00214       printError("The catalog "+cat->connectInfo()+" is not known.",true);
    00215     }
    00216     printError("The catalog "+cat->connectInfo()+" is not writable.",true);
    00217   }
    00218   printError("Invalid file catalog.",true);
    00219 }

void MultiFileCatalog::setWriteCatalog | ( | CSTR | connect | ) | `[virtual]`

Define the writable catalog identified by name.

Implements Gaudi::IFileCatalogMgr.

Definition at line 221 of file MultiFileCatalog.cpp.

    00221                                                     {
    00222   Catalogs::iterator i = i_findCatalog(connect,true);
    00223   if ( i == m_catalogs.end() ) {
    00224     addCatalog(connect);
    00225     setWriteCatalog(findCatalog(connect,true));
    00226     return;
    00227   }
    00228   setWriteCatalog(*i);
    00229 }

IFileCatalog * MultiFileCatalog::getCatalog | ( | CSTR | fid,
|  | bool | throw_if_not,
|  | bool | writable = `true`,
|  | bool | prt = `true` |
| ) |  |  | const`[private]`

Find catalog containing a given file identifier.

Definition at line 88 of file MultiFileCatalog.cpp.

    00092 {
    00093   for(Catalogs::const_iterator i=m_catalogs.begin(); i != m_catalogs.end(); ++i)  {
    00094     IFileCatalog* c = *i;
    00095     if ( c )  {
    00096       if ( writable && c->readOnly() )
    00097         continue;
    00098       else if ( fid.empty() )
    00099         return c;
    00100       else if ( !fid.empty() && c->existsFID(fid) )
    00101         return c;
    00102     }
    00103   }
    00104   if ( prt )  {
    00105     printError("No writable file catalog found which contains FID:"+fid,throw_if_not);
    00106   }
    00107   else  {
    00108     MsgStream log(msgSvc(),name());
    00109     log << MSG::DEBUG << "No writable file catalog found which contains FID:" << fid << endmsg;
    00110   }
    00111   return 0;
    00112 }

MultiFileCatalog::Catalogs::iterator MultiFileCatalog::i_findCatalog | ( | CSTR | connect,
|  | bool | must_be_writable |
| ) |  |  | `[private]`

Find catalog by connect string.

Definition at line 123 of file MultiFileCatalog.cpp.

    00123                                                                     {
    00124   for(Catalogs::iterator i=m_catalogs.begin(); i != m_catalogs.end(); ++i) {
    00125     if ( connect == (*i)->connectInfo() ) {
    00126       return (must_be_writable && (*i)->readOnly()) ? m_catalogs.end() : i;
    00127     }
    00128   }
    00129   return m_catalogs.end();
    00130 }

void MultiFileCatalog::propHandler | ( | Property & |  | ) | `[private]`

simple property handle to allow interactive modification of list of the file catalogs

Definition at line 256 of file MultiFileCatalog.cpp.

    00257 {
    00258   // not yet initialized
    00259   if ( !m_started ) { m_oldNames = m_catalogNames; return; } // RETURN
    00260   // no real change - no action
    00261   if ( m_catalogNames == m_oldNames ) { return; }
    00262   m_oldNames = m_catalogNames ;
    00263   // remove ALL catalogs
    00264   removeCatalog("") ;
    00265   // add new catalogs
    00266   for ( CatalogNames::const_iterator inew = m_catalogNames.begin() ;
    00267         m_catalogNames.end() != inew ; ++inew ) { addCatalog ( *inew ) ; }
    00268   // start
    00269   init() ;
    00270   //
    00271   MsgStream log ( msgSvc() , name() ) ;
    00272   log << MSG::DEBUG
    00273       << "New catalogs to be used: "
    00274       << Gaudi::Utils::toString ( m_catalogNames ) << endreq ;
    00275 }

void MultiFileCatalog::printError | ( | CSTR | msg,
|  | bool | throw_exc = `true` |
| ) |  |  | const`[private]`

Definition at line 132 of file MultiFileCatalog.cpp.

    00132                                                                 {
    00133   MsgStream log(msgSvc(),name());
    00134   if ( rethrow )  {
    00135     log << MSG::FATAL << msg << endmsg;
    00136     throw runtime_error("Catalog> "+msg);
    00137   }
    00138   log << MSG::ERROR << msg << endmsg;
    00139 }

std::string Gaudi::MultiFileCatalog::lookupFID | ( | CSTR | lfn | ) | const`[private]`

## Member Data Documentation

Catalogs Gaudi::MultiFileCatalog::m_catalogs`[private]`

Container with references to known catalogs.

Definition at line 172 of file MultiFileCatalog.h.

CatalogNames Gaudi::MultiFileCatalog::m_catalogNames`[private]`

Property : Container with catalog names.

Definition at line 174 of file MultiFileCatalog.h.

bool Gaudi::MultiFileCatalog::m_started`[private]`

Flag to indicate if catalog is started.

Definition at line 176 of file MultiFileCatalog.h.

CatalogNames Gaudi::MultiFileCatalog::m_oldNames`[private]`

BACKUP:: Container with catalog names.

Definition at line 178 of file MultiFileCatalog.h.

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

- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v20r3/GaudiUtils/src/component/MultiFileCatalog.h
- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v20r3/GaudiUtils/src/component/MultiFileCatalog.cpp