File indexing completed on 2025-02-21 10:00:37
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef GAUDIKERNEL_TSDATASVC_H
0012 #define GAUDIKERNEL_TSDATASVC_H
0013
0014
0015 #include "GaudiKernel/DataStoreItem.h"
0016 #include "GaudiKernel/IDataManagerSvc.h"
0017 #include "GaudiKernel/IDataProviderSvc.h"
0018 #include "GaudiKernel/RegistryEntry.h"
0019 #include "GaudiKernel/Service.h"
0020
0021
0022 #include <mutex>
0023
0024 namespace {
0025 typedef std::recursive_mutex tsDataSvcMutex;
0026 }
0027
0028
0029
0030 class IIncidentSvc;
0031
0032 class IOpaqueAddress;
0033
0034 class DataObject;
0035
0036 class IDataStoreAgent;
0037
0038
0039 namespace DataSvcHelpers {
0040
0041 class InhibitMap;
0042
0043 class RegistryEntry;
0044 }
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065 class GAUDI_API TsDataSvc : public extends<Service, IDataProviderSvc, IDataManagerSvc> {
0066
0067
0068 IConversionSvc* m_dataLoader = nullptr;
0069
0070 IIncidentSvc* m_incidentSvc = nullptr;
0071
0072 Gaudi::Property<CLID> m_rootCLID{ this, "RootCLID", 110 , "CLID of root entry" };
0073 Gaudi::Property<std::string> m_rootName{ this, "RootName", "/Event", "name of root entry" };
0074 Gaudi::Property<bool> m_forceLeaves{ this, "ForceLeaves", false,
0075 "force creation of default leaves on registerObject" };
0076 Gaudi::Property<std::vector<std::string>> m_inhibitPathes{ this, "InhibitPathes", {}, "inhibited leaves" };
0077
0078 Gaudi::Property<bool> m_enableFaultHdlr{ this, "EnableFaultHandler", false,
0079 "enable incidents on data creation requests" };
0080 Gaudi::Property<std::string> m_faultName{ this, "DataFaultName", "DataFault", "Name of the data fault incident" };
0081
0082 Gaudi::Property<bool> m_enableAccessHdlr{ this, "EnableAccessHandler", false,
0083 "enable incidents on data access requests" };
0084 Gaudi::Property<std::string> m_accessName{ this, "DataAccessName", "DataAccess", "Name of the data access incident" };
0085
0086
0087 std::vector<DataStoreItem> m_preLoads;
0088
0089 std::unique_ptr<DataSvcHelpers::RegistryEntry> m_root;
0090
0091 public:
0092
0093 CLID rootCLID() const override;
0094
0095
0096 const std::string& rootName() const override;
0097
0098
0099 StatusCode registerAddress( std::string_view fullPath, IOpaqueAddress* pAddress ) override;
0100
0101 using IDataManagerSvc::registerAddress;
0102
0103
0104 StatusCode registerAddress( IRegistry* parentObj, std::string_view objectPath, IOpaqueAddress* pAddress ) override;
0105
0106 using IDataManagerSvc::unregisterAddress;
0107
0108 StatusCode unregisterAddress( std::string_view fullPath ) override;
0109
0110
0111 StatusCode unregisterAddress( IRegistry* pParent, std::string_view objPath ) override;
0112
0113
0114
0115
0116 StatusCode objectLeaves( const DataObject* pObject, std::vector<IRegistry*>& refLeaves ) override;
0117
0118
0119
0120 StatusCode objectLeaves( const IRegistry* pRegistry, std::vector<IRegistry*>& refLeaves ) override;
0121
0122
0123 StatusCode objectParent( const DataObject* pObject, IRegistry*& refpParent ) override;
0124
0125 StatusCode objectParent( const IRegistry* pRegistry, IRegistry*& refpParent ) override;
0126
0127
0128
0129
0130 StatusCode clearSubTree( std::string_view sub_tree_path ) override;
0131
0132
0133
0134
0135 StatusCode clearSubTree( DataObject* pObject ) override;
0136
0137
0138 StatusCode clearStore() override;
0139
0140
0141
0142
0143 StatusCode traverseSubTree( std::string_view sub_tree_path, IDataStoreAgent* pAgent ) override;
0144
0145
0146 StatusCode traverseSubTree( DataObject* pObject, IDataStoreAgent* pAgent ) override;
0147
0148
0149 StatusCode traverseTree( IDataStoreAgent* pAgent ) override;
0150
0151
0152
0153 StatusCode setRoot( std::string root_name, DataObject* pRootObj ) override;
0154
0155
0156
0157
0158 virtual StatusCode i_setRoot( std::string root_name, DataObject* pRootObj );
0159 StatusCode i_setRoot( DataObject* pRootObj ) { return i_setRoot( m_rootName, pRootObj ); }
0160
0161
0162
0163 StatusCode setRoot( std::string root_path, IOpaqueAddress* pRootAddr ) override;
0164
0165
0166
0167
0168
0169 virtual StatusCode i_setRoot( std::string root_path, IOpaqueAddress* pRootAddr );
0170 StatusCode i_setRoot( IOpaqueAddress* pRootAddr ) { return i_setRoot( m_rootName, pRootAddr ); }
0171
0172
0173
0174
0175 StatusCode setDataLoader( IConversionSvc* svc, IDataProviderSvc* dpsvc = nullptr ) override;
0176
0177
0178 StatusCode addPreLoadItem( const DataStoreItem& item ) override;
0179
0180
0181 StatusCode removePreLoadItem( const DataStoreItem& item ) override;
0182
0183
0184 StatusCode resetPreLoad() override;
0185
0186
0187
0188
0189
0190
0191
0192
0193 virtual StatusCode preLoad( int depth, int load_depth, DataObject* pObject );
0194
0195
0196 StatusCode preLoad() override;
0197
0198 using IDataProviderSvc::registerObject;
0199
0200
0201 StatusCode registerObject( std::string_view parentPath, std::string_view objPath, DataObject* pObject ) override;
0202
0203
0204 StatusCode registerObject( DataObject* parentObj, std::string_view objPath, DataObject* pObject ) override;
0205
0206
0207 StatusCode unregisterObject( std::string_view fullPath ) override;
0208
0209
0210 StatusCode unregisterObject( DataObject* pObject ) override;
0211
0212
0213 StatusCode unregisterObject( DataObject* pObject, std::string_view objectPath ) override;
0214
0215 using IDataProviderSvc::retrieveObject;
0216
0217
0218 StatusCode retrieveObject( IRegistry* pDirectory, std::string_view path, DataObject*& pObject ) override;
0219
0220 using IDataProviderSvc::findObject;
0221
0222
0223 StatusCode findObject( std::string_view fullPath, DataObject*& pObject ) override;
0224
0225
0226 StatusCode findObject( IRegistry* pDirectory, std::string_view path, DataObject*& pObject ) override;
0227
0228 using IDataProviderSvc::linkObject;
0229
0230
0231 StatusCode linkObject( IRegistry* from, std::string_view objPath, DataObject* to ) override;
0232
0233
0234 StatusCode linkObject( std::string_view fullPath, DataObject* to ) override;
0235
0236 using IDataProviderSvc::unlinkObject;
0237
0238
0239 StatusCode unlinkObject( IRegistry* from, std::string_view objPath ) override;
0240
0241
0242 StatusCode unlinkObject( DataObject* fromObj, std::string_view objPath ) override;
0243
0244
0245 StatusCode unlinkObject( std::string_view fullPath ) override;
0246
0247
0248 StatusCode updateObject( IRegistry* pDirectory ) override;
0249
0250
0251 StatusCode updateObject( DataObject* toUpdate ) override;
0252
0253
0254 StatusCode initialize() override;
0255
0256
0257 StatusCode reinitialize() override;
0258
0259
0260 StatusCode finalize() override;
0261
0262
0263 using extends::extends;
0264
0265
0266 TsDataSvc( const TsDataSvc& ) = delete;
0267
0268 TsDataSvc& operator=( const TsDataSvc& ) = delete;
0269
0270 protected:
0271
0272 bool checkRoot() { return 0 != m_root; }
0273
0274
0275
0276
0277 virtual IConversionSvc* getDataLoader( IRegistry* pReg );
0278
0279
0280 virtual DataObject* createDefaultObject() const;
0281
0282
0283
0284
0285 virtual StatusCode loadObject( IRegistry* pNode );
0286
0287
0288
0289
0290 virtual StatusCode loadObject( IConversionSvc* pLoader, IRegistry* pNode );
0291
0292
0293 StatusCode retrieveEntry( DataSvcHelpers::RegistryEntry* pNode, std::string_view path,
0294 DataSvcHelpers::RegistryEntry*& pEntry );
0295
0296
0297
0298
0299
0300
0301 DataObject* handleDataFault( IRegistry* pReg, std::string_view path = {} );
0302
0303
0304 tsDataSvcMutex m_accessMutex;
0305 };
0306 #endif