| The Gaudi Framework v30r0 (c919700c)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

MultiFileCatalog.h
Go to the documentation of this file.
1 #ifndef GAUDIUTILS_MULTIFILECATALOG_H
2 #define GAUDIUTILS_MULTIFILECATALOG_H
3
4 #include "GaudiKernel/Service.h"
5 #include "GaudiUtils/IFileCatalog.h"
6 #include "GaudiUtils/IFileCatalogMgr.h"
7
8 /*
9 * Gaudi namespace declaration
10 */
11 namespace Gaudi
12 {
13
21 class MultiFileCatalog : public extends<Service, IFileCatalog, IFileCatalogMgr>
22 {
23 public:
24 // disambiguate between Service::Factory and IFileCatalog::Factory
25 typedef Service::Factory Factory;
26
27 protected:
28 typedef const std::string& CSTR;
29 typedef std::vector<IFileCatalog*> Catalogs;
30 typedef std::vector<std::string> CatalogNames;
31
32 template <class A1, class F>
33 std::string _find( A1& arg1, F pmf ) const
34 {
35 std::string result;
36 for ( const auto& i : m_catalogs ) {
37 result = ( i->*pmf )( arg1 );
38 if ( !result.empty() ) break;
39 }
40 return result;
41 }
42 template <class A1, class F>
43 void _collect( A1& arg1, F f ) const
44 {
45 A1 tmp;
46 for ( const auto& i : m_catalogs ) {
47 f( i, tmp ); // tmp = f(i)
48 arg1.insert( arg1.end(), tmp.begin(), tmp.end() );
49 tmp.clear();
50 }
51 }
52 template <class A2, class A1, class F>
53 void _collect( const A2& arg2, A1& arg1, F f ) const
54 {
55 A1 tmp;
56 for ( const auto& i : m_catalogs ) {
57 f( i, arg2, tmp ); // tmp = f(i,arg2)
58 arg1.insert( arg1.end(), tmp.begin(), tmp.end() );
59 tmp.clear();
60 }
61 }
62
63 public:
65 MultiFileCatalog( const std::string& nam, ISvcLocator* svc );
67 ~MultiFileCatalog() override = default;
68
70 StatusCode initialize() override;
73 StatusCode finalize() override;
74
76 std::string createFID() const override;
79 CSTR connectInfo() const override;
81 void init() override;
83 void commit() override;
85 void rollback() override;
87 bool readOnly() const override;
89 bool dirty() const override;
91 bool existsPFN( CSTR pfn ) const override { return !lookupPFN( pfn ).empty(); }
93 std::string lookupPFN( CSTR pfn ) const override { return _find( pfn, &IFileCatalog::lookupPFN ); }
95 bool existsLFN( CSTR lfn ) const override { return !lookupLFN( lfn ).empty(); }
97 std::string lookupLFN( CSTR lfn ) const override { return _find( lfn, &IFileCatalog::lookupLFN ); }
99 bool existsFID( CSTR fid ) const override { return 0 != getCatalog( fid, false, false, false ); }
101 void getPFN( CSTR fid, Files& files ) const override
102 {
103 _collect( fid, files, std::mem_fn( &IFileCatalog::getPFN ) );
104 }
106 void getLFN( CSTR fid, Files& files ) const override
107 {
108 _collect( fid, files, std::mem_fn( &IFileCatalog::getLFN ) );
109 }
110
112 void getFID( Strings& fids ) const override { _collect( fids, std::mem_fn( &IFileCatalog::getFID ) ); }
114 void deleteFID( CSTR fid ) const override { writeCatalog( fid )->deleteFID( fid ); }
116 void registerPFN( CSTR fid, CSTR pfn, CSTR ftype ) const override;
118 void registerLFN( CSTR fid, CSTR lfn ) const override;
120 void registerFID( CSTR fid ) const override { writeCatalog()->registerFID( fid ); }
122 void getMetaData( CSTR fid, Attributes& attr ) const override
123 {
124 _collect( fid, attr, std::mem_fn( &IFileCatalog::getMetaData ) );
125 }
127 std::string getMetaDataItem( CSTR fid, CSTR name ) const override;
129 void setMetaData( CSTR fid, CSTR attr, CSTR val ) const override
130 {
131 writeCatalog( fid )->setMetaData( fid, attr, val );
132 }
134 void dropMetaData( CSTR fid ) const override { writeCatalog( fid )->dropMetaData( fid ); }
136 void dropMetaData( CSTR fid, CSTR attr ) const override { writeCatalog( fid )->dropMetaData( fid, attr ); }
137
139 IFileCatalog* findCatalog( CSTR connect, bool must_be_writable ) const override;
142 void addCatalog( CSTR connect ) override;
144 void addCatalog( IFileCatalog* cat ) override;
146 void removeCatalog( CSTR connect ) override;
148 void removeCatalog( const IFileCatalog* cat ) override;
150 Catalogs& catalogs() override { return m_catalogs; }
152 const Catalogs& catalogs() const override { return m_catalogs; }
154 IFileCatalog* writeCatalog( CSTR fid = "" ) const override { return getCatalog( fid, true, true, false ); }
156 void setWriteCatalog( IFileCatalog* cat ) override;
158 void setWriteCatalog( CSTR connect ) override;
159
160 private:
162 IFileCatalog* getCatalog( CSTR fid, bool throw_if_not, bool writable = true, bool prt = true ) const;
164 Catalogs::iterator i_findCatalog( CSTR connect, bool must_be_writable );
165
168 void propHandler( Details::PropertyBase& /* p */ );
169
170 void printError( CSTR msg, bool throw_exc = true ) const;
171 std::string lookupFID( CSTR lfn ) const;
172
174 Catalogs m_catalogs;
175
176 Gaudi::Property<CatalogNames> m_catalogNames{
177 this, "Catalogs", {{"xmlcatalog_file:test_catalog.xml"}}, "catalog names"};
178
180 bool m_started = false;
182 CatalogNames m_oldNames;
183 };
184 } /* End namespace Gaudi */
185 #endif /* GAUDIUTILS_MULTIFILECATALOG_H */
Gaudi::MultiFileCatalog::MultiFileCatalog
MultiFileCatalog(const std::string &nam, ISvcLocator *svc)
Create a catalog file, initialization of XercesC.
Definition: MultiFileCatalog.cpp:25
CommonMessagingBase::msg
MsgStream & msg() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:121
std::string::empty
T empty(T...args)
ISvcLocator
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
Gaudi::MultiFileCatalog::m_started
bool m_started
Flag to indicate if catalog is started.
Definition: MultiFileCatalog.h:180
Gaudi::MultiFileCatalog::createFID
std::string createFID() const override
Catalog interface.
Definition: MultiFileCatalog.cpp:60
Service::name
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:289
Gaudi::MultiFileCatalog::getPFN
void getPFN(CSTR fid, Files &files) const override
Dump all physical file names of the catalog and their attributes associate to the FileID...
Definition: MultiFileCatalog.h:101
Gaudi::IFileCatalog::getPFN
virtual void getPFN(const std::string &fid, Files &files) const =0
Dump all PFNames of the catalog and their attributes associate to the FileID.
Gaudi::Property
Implementation of property with value of concrete type.
Definition: Property.h:319
Gaudi::MultiFileCatalog::registerPFN
void registerPFN(CSTR fid, CSTR pfn, CSTR ftype) const override
Create a FileID and DOM Node of the PFN with all the attributes.
Definition: MultiFileCatalog.cpp:215
Gaudi::IFileCatalog::getMetaData
virtual void getMetaData(const std::string &fid, Attributes &attr) const =0
Dump all MetaData of the catalog for a given file ID.
Gaudi::IFileCatalog::getLFN
virtual void getLFN(const std::string &fid, Files &files) const =0
Dump all LFNames of the catalog associate to the FileID.
Gaudi::MultiFileCatalog::getMetaDataItem
std::string getMetaDataItem(CSTR fid, CSTR name) const override
Access metadata item.
Definition: MultiFileCatalog.cpp:205
Gaudi::MultiFileCatalog::printError
void printError(CSTR msg, bool throw_exc=true) const
Definition: MultiFileCatalog.cpp:99
Gaudi::IFileCatalog::deleteFID
virtual void deleteFID(const std::string &FileID) const =0
Delete FileID Node from the catalog.
IFileCatalogMgr.h
Gaudi::MultiFileCatalog::lookupFID
std::string lookupFID(CSTR lfn) const
Gaudi::MultiFileCatalog::setWriteCatalog
void setWriteCatalog(IFileCatalog *cat) override
Define the writable catalog identified by reference.
Definition: MultiFileCatalog.cpp:177
Gaudi::MultiFileCatalog::dropMetaData
void dropMetaData(CSTR fid) const override
Drop all metadata of one FID.
Definition: MultiFileCatalog.h:134
Gaudi::MultiFileCatalog::Factory
Service::Factory Factory
Definition: MultiFileCatalog.h:25
Gaudi::IFileCatalog::registerFID
virtual void registerFID(const std::string &fid) const =0
Create a Node for a FileID and DOM Node.
Gaudi::MultiFileCatalog::_collect
void _collect(A1 &arg1, F f) const
Definition: MultiFileCatalog.h:43
std::string
STL class.
Service.h
Gaudi::MultiFileCatalog::i_findCatalog
Catalogs::iterator i_findCatalog(CSTR connect, bool must_be_writable)
Find catalog by connect string.
Definition: MultiFileCatalog.cpp:89
Gaudi::IFileCatalog::getFID
virtual void getFID(Strings &fids) const =0
Dump all file Identifiers.
Gaudi::MultiFileCatalog::getCatalog
IFileCatalog * getCatalog(CSTR fid, bool throw_if_not, bool writable=true, bool prt=true) const
Find catalog containing a given file identifier.
Definition: MultiFileCatalog.cpp:68
Gaudi::MultiFileCatalog::initialize
StatusCode initialize() override
IService implementation.
Definition: MultiFileCatalog.cpp:30
Gaudi::MultiFileCatalog::catalogs
const Catalogs & catalogs() const override
Access catalog container (CONST)
Definition: MultiFileCatalog.h:152
Gaudi::MultiFileCatalog::m_catalogs
Catalogs m_catalogs
Container with references to known catalogs.
Definition: MultiFileCatalog.h:174
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Gaudi::MultiFileCatalog::m_catalogNames
Gaudi::Property< CatalogNames > m_catalogNames
Definition: MultiFileCatalog.h:176
Gaudi::MultiFileCatalog::_find
std::string _find(A1 &arg1, F pmf) const
Definition: MultiFileCatalog.h:33
Gaudi::MultiFileCatalog::getMetaData
void getMetaData(CSTR fid, Attributes &attr) const override
Dump all MetaData of the catalog for a given file ID.
Definition: MultiFileCatalog.h:122
Gaudi::MultiFileCatalog::setMetaData
void setMetaData(CSTR fid, CSTR attr, CSTR val) const override
Insert/update metadata item.
Definition: MultiFileCatalog.h:129
IFileCatalog.h
Gaudi::MultiFileCatalog::getFID
void getFID(Strings &fids) const override
Dump all file Identifiers.
Definition: MultiFileCatalog.h:112
Gaudi::Details::PropertyBase
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
Definition: Property.h:32
Gaudi::MultiFileCatalog::CSTR
const std::string & CSTR
Definition: MultiFileCatalog.h:28
Gaudi::MultiFileCatalog::~MultiFileCatalog
~MultiFileCatalog() override=default
Destructor,.
Gaudi::MultiFileCatalog::connectInfo
CSTR connectInfo() const override
Access to connect string.
Definition: MultiFileCatalog.cpp:62
Gaudi::IFileCatalog::lookupPFN
virtual std::string lookupPFN(const std::string &lfn) const =0
Lookup file identifier by physical file name.
Gaudi::MultiFileCatalog::getLFN
void getLFN(CSTR fid, Files &files) const override
Dump all logical file names of the catalog associate to the FileID.
Definition: MultiFileCatalog.h:106
Gaudi::IFileCatalog
File catalog interface.
Definition: IFileCatalog.h:25
Gaudi::MultiFileCatalog::Catalogs
std::vector< IFileCatalog * > Catalogs
Definition: MultiFileCatalog.h:29
Gaudi::MultiFileCatalog::registerLFN
void registerLFN(CSTR fid, CSTR lfn) const override
Create a FileID and DOM Node of the LFN with all the attributes.
Definition: MultiFileCatalog.cpp:222
Gaudi::MultiFileCatalog::lookupLFN
std::string lookupLFN(CSTR lfn) const override
Lookup file identifier by logical file name.
Definition: MultiFileCatalog.h:97
Gaudi::MultiFileCatalog::lookupPFN
std::string lookupPFN(CSTR pfn) const override
Lookup file identifier by physical file name.
Definition: MultiFileCatalog.h:93
Gaudi::IFileCatalog::setMetaData
virtual void setMetaData(const std::string &fid, const std::string &name, const std::string &value) const =0
Insert/update metadata item.
Gaudi::MultiFileCatalog::findCatalog
IFileCatalog * findCatalog(CSTR connect, bool must_be_writable) const override
Catalog management.
Definition: MultiFileCatalog.cpp:82
std::vector< IFileCatalog * >
Gaudi::IFileCatalog::dropMetaData
virtual void dropMetaData(const std::string &fid) const =0
Drop all metadata of one FID.
extends
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
Gaudi::MultiFileCatalog::dirty
bool dirty() const override
Check if the catalog should be updated.
Definition: MultiFileCatalog.cpp:235
Gaudi::MultiFileCatalog::m_oldNames
CatalogNames m_oldNames
BACKUP:: Container with catalog names.
Definition: MultiFileCatalog.h:182
Gaudi::MultiFileCatalog::rollback
void rollback() override
Save DOM catalog to file.
Definition: MultiFileCatalog.cpp:252
Gaudi::MultiFileCatalog::finalize
StatusCode finalize() override
Finalize service object.
Definition: MultiFileCatalog.cpp:50
Gaudi::MultiFileCatalog::init
void init() override
Parse the DOM tree of the XML catalog.
Definition: MultiFileCatalog.cpp:241
Gaudi::MultiFileCatalog::registerFID
void registerFID(CSTR fid) const override
Create a FileID and DOM Node.
Definition: MultiFileCatalog.h:120
Gaudi::MultiFileCatalog::addCatalog
void addCatalog(CSTR connect) override
Add new catalog identified by name to the existing ones.
Definition: MultiFileCatalog.cpp:108
Gaudi::MultiFileCatalog::CatalogNames
std::vector< std::string > CatalogNames
Definition: MultiFileCatalog.h:30
Gaudi::MultiFileCatalog::catalogs
Catalogs & catalogs() override
Access catalog container.
Definition: MultiFileCatalog.h:150
Gaudi::MultiFileCatalog::readOnly
bool readOnly() const override
Check if the catalog is read-only.
Definition: MultiFileCatalog.cpp:229
std::mem_fn
T mem_fn(T...args)
Gaudi::MultiFileCatalog::existsFID
bool existsFID(CSTR fid) const override
Return the status of a FileID.
Definition: MultiFileCatalog.h:99
Gaudi::MultiFileCatalog::deleteFID
void deleteFID(CSTR fid) const override
Delete FileID from the catalog.
Definition: MultiFileCatalog.h:114
Gaudi::MultiFileCatalog::existsPFN
bool existsPFN(CSTR pfn) const override
Return the status of physical file name.
Definition: MultiFileCatalog.h:91
Gaudi::MultiFileCatalog::writeCatalog
IFileCatalog * writeCatalog(CSTR fid="") const override
Access to the (first) writable file catalog.
Definition: MultiFileCatalog.h:154
Gaudi::MultiFileCatalog::commit
void commit() override
Save DOM catalog to file.
Definition: MultiFileCatalog.cpp:247
Service::Factory
Gaudi::PluginService::Factory< IService *, const std::string &, ISvcLocator * > Factory
Definition: Service.h:40
Gaudi::MultiFileCatalog::existsLFN
bool existsLFN(CSTR lfn) const override
Return the status of a logical file name.
Definition: MultiFileCatalog.h:95
Gaudi::MultiFileCatalog::removeCatalog
void removeCatalog(CSTR connect) override
Remove catalog identified by name from the existing ones.
Definition: MultiFileCatalog.cpp:153
Gaudi
Helper functions to set/get the application return code.
Definition: __init__.py:1
Gaudi::MultiFileCatalog::dropMetaData
void dropMetaData(CSTR fid, CSTR attr) const override
Drop specified metadata item.
Definition: MultiFileCatalog.h:136
Gaudi::IFileCatalog::lookupLFN
virtual std::string lookupLFN(const std::string &lfn) const =0
Lookup file identifier by physical file name.
Gaudi::MultiFileCatalog::_collect
void _collect(const A2 &arg2, A1 &arg1, F f) const
Definition: MultiFileCatalog.h:53
Gaudi::MultiFileCatalog::propHandler
void propHandler(Details::PropertyBase &)
simple property handle to allow interactive modification of list of the file catalogs ...
Definition: MultiFileCatalog.cpp:257
Gaudi::MultiFileCatalog
This class constitutes the core of the XML based FileCatalog API for using POOL within Gaudi...
Definition: MultiFileCatalog.h:21