PersistencySvc.h
Go to the documentation of this file.
1 // ============================================================
2 //
3 // PersistencySvc.h
4 // ------------------------------------------------------------
5 //
6 // Package : PersistencySvc
7 //
8 // Author : Markus Frank
9 //
10 // ===========================================================
11 #ifndef PERSISTENCYSVC_PERSISTENCYSVC_H
12 #define PERSISTENCYSVC_PERSISTENCYSVC_H 1
13 
14 // Framework include files
15 #include "GaudiKernel/Service.h"
16 #include "GaudiKernel/IConversionSvc.h"
17 #include "GaudiKernel/IPersistencySvc.h"
18 #include "GaudiKernel/IAddressCreator.h"
19 #include "GaudiKernel/IDataProviderSvc.h"
20 
21 // STL include files
22 #include <map>
23 #include <algorithm>
24 #include <functional>
25 
50 class PersistencySvc : public extends3<Service,
51  IConversionSvc,
52  IPersistencySvc,
53  IAddressCreator> {
54 protected:
55 
56  class ServiceEntry final {
61  public:
66  : m_serviceType ( type ),
67  m_service ( std::move(svc) ),
68  m_cnvService ( std::move(cnv) ),
69  m_addrCreator ( std::move(cr) )
70  { }
72  IService* svc,
73  IConversionSvc* cnv,
74  IAddressCreator* cr) {
75  m_serviceType = type;
76  m_addrCreator = cr;
77  m_cnvService = cnv;
78  m_service = svc;
79  }
80  ServiceEntry(const ServiceEntry& ) = default;
81 
83  return m_service;
84  }
86  return m_cnvService;
87  }
89  return m_addrCreator;
90  }
91  long svcType() const {
92  return m_serviceType;
93  }
94  };
95  typedef std::map<long,ServiceEntry> Services;
96 /*
97  class SvcTest : public std::unary_function<ServiceEntry, bool> {
98  public:
99  SvcTest(long test) : m_test(test) {
100  }
101  bool operator()( const ServiceEntry& testee ) {
102  return m_test == testee.svcType() ? true : false;
103  }
104  protected:
105  long m_test;
106  };
107 */
108 public:
109 
112  long repSvcType() const override;
114 
116  const CLID& objType() const override;
117 
119  StatusCode createObj(IOpaqueAddress* pAddress,DataObject*& refpObject) override;
120 
122  StatusCode fillObjRefs(IOpaqueAddress* pAddress, DataObject* pObject) override;
123 
125  StatusCode updateObj(IOpaqueAddress* pAddress, DataObject* refpObject) override;
126 
128  StatusCode updateObjRefs(IOpaqueAddress* pAddress, DataObject* pObject) override;
129 
131  StatusCode createRep(DataObject* pObject, IOpaqueAddress*& refpAddress) override;
132 
134  StatusCode fillRepRefs(IOpaqueAddress* pAddress,DataObject* pObject) override;
135 
137  StatusCode updateRep(IOpaqueAddress* pAddress, DataObject* pObject) override;
138 
140  StatusCode updateRepRefs(IOpaqueAddress* pAddress, DataObject* pObject) override;
141 
143  StatusCode setDataProvider(IDataProviderSvc* pStore) override;
144 
146  SmartIF<IDataProviderSvc>& dataProvider() const override;
147 
150 
152  SmartIF<IConversionSvc>& conversionSvc() const override;
153 
155  StatusCode setAddressCreator(IAddressCreator* creator) override;
156 
158  SmartIF<IAddressCreator>& addressCreator() const override;
159 
161  StatusCode addConverter(IConverter* pConverter) override;
162 
164  StatusCode addConverter(const CLID& clid) override;
165 
167  IConverter* converter(const CLID& clid) override;
168 
170  StatusCode removeConverter(const CLID& clid) override;
171 
173  StatusCode connectOutput(const std::string& outputFile,
174  const std::string& openMode) override;
176  StatusCode connectOutput(const std::string& outputFile) override;
177 
179  StatusCode commitOutput(const std::string& output, bool do_commit) override;
180 
182  StatusCode createAddress(long svc_type,
183  const CLID& clid,
184  const std::string* pars,
185  const unsigned long* ipars,
186  IOpaqueAddress*& refpAddress) override;
187 
189  StatusCode convertAddress( const IOpaqueAddress* pAddress,
190  std::string& refAddress) override;
191 
193  StatusCode createAddress( long svc_type,
194  const CLID& clid,
195  const std::string& refAddress,
196  IOpaqueAddress*& refpAddress) override;
198 
203 
205  StatusCode removeCnvService(long type) override;
206 
208  StatusCode setDefaultCnvService(long type) override;
209 
211  StatusCode getService(long service_type, IConversionSvc*& refpSvc) override;
212 
214  StatusCode getService(const std::string& service_type, IConversionSvc*& refpSvc) override;
216 
219  StatusCode initialize() override;
221 
223  StatusCode finalize() override;
225 
228  PersistencySvc(const std::string& name, ISvcLocator* svc);
230 
232  ~PersistencySvc() override = default;
233 protected:
234 
236  SmartIF<IConversionSvc>& service(const std::string& nam);
237 
239  SmartIF<IConversionSvc>& service(long service_type);
240 
242  SmartIF<IAddressCreator>& addressCreator(long service_type);
243 
245  void encodeAddrHdr(long service_type,
246  const CLID& clid,
247  std::string& address) const;
248 
250  void decodeAddrHdr(const std::string& address,
251  long& service_type,
252  CLID& clid,
253  std::string& address_trailer) const;
254 
255 
257  StatusCode makeCall(int typ, IOpaqueAddress*& pAddress, DataObject*& pObject);
258 
260  bool enable(bool value);
262 
264  void svcNamesHandler( Property& theProp );
265 
271  Services m_cnvServices;
279  bool m_enable = true;
280 
283 };
284 #endif // PERSISTENCYSVC_PERSISTENCYSVC_H
SmartIF< IAddressCreator > m_addrCreator
Pointer to the IAddressCreator interface of this, for addressCreator().
SmartIF< IAddressCreator > & addressCreator() const override
Retrieve address creator facility.
long svcType() const
SmartIF< IConversionSvc > & service(const std::string &nam)
Retrieve conversion service by name.
SmartIF< IConversionSvc > & conversionSvc() const
SmartIF< IAddressCreator > & addrCreator() const
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
The data converters are responsible to translate data from one representation into another...
Definition: IConverter.h:57
long m_cnvDefType
Default service type.
StatusCode initialize() override
Initialize the service.
StatusCode connectOutput(const std::string &outputFile, const std::string &openMode) override
Connect the output file to the service with open mode.
SmartIF< IService > & service() const
IAddressCreator interface definition.
bool m_enable
Flag to indicate that the service is enabled.
StatusCode setConversionSvc(IConversionSvc *svc) override
Set conversion service the converter is connected to.
STL namespace.
StatusCode makeCall(int typ, IOpaqueAddress *&pAddress, DataObject *&pObject)
Implementation helper.
SmartIF< IService > m_service
StringArrayProperty m_svcNames
Names of services to be requested from the service locator and added by default.
Data provider interface definition.
StatusCode removeConverter(const CLID &clid) override
Remove converter object from conversion service (if present).
PersistencySvc(const std::string &name, ISvcLocator *svc)
Standard Constructor.
StatusCode updateRep(IOpaqueAddress *pAddress, DataObject *pObject) override
Implementation of IConverter: Update the converted representation of a transient object.
StatusCode updateObjRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Implementation of IConverter: Update the references of an updated transient object.
StatusCode addConverter(IConverter *pConverter) override
Add converter object to conversion service.
StatusCode convertAddress(const IOpaqueAddress *pAddress, std::string &refAddress) override
Convert an address to string form.
long repSvcType() const override
Return default service type.
StatusCode fillObjRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Implementation of IConverter: Resolve the references of the created transient object.
bool enable(bool value)
Set enabled flag.
std::map< long, ServiceEntry > Services
StatusCode setDataProvider(IDataProviderSvc *pStore) override
Define transient datastore.
void encodeAddrHdr(long service_type, const CLID &clid, std::string &address) const
Retrieve string from storage type and clid.
void svcNamesHandler(Property &theProp)
Handlers for Service Names Property.
const CLID & objType() const override
Retrieve the class type of objects the converter produces. (DUMMY)
General service interface definition.
Definition: IService.h:18
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress) override
Implementation of IConverter: Convert the transient object to the requested representation.
StatusCode finalize() override
stop the service.
const long TEST_StorageType
Definition: ClassID.h:49
StatusCode getService(long service_type, IConversionSvc *&refpSvc) override
Retrieve conversion service identified by technology.
ServiceEntry(long type, IService *svc, IConversionSvc *cnv, IAddressCreator *cr)
ServiceEntry(long type, SmartIF< IService > svc, SmartIF< IConversionSvc > cnv, SmartIF< IAddressCreator > cr)
SmartIF< IConversionSvc > m_cnvDefault
Default output service.
StatusCode commitOutput(const std::string &output, bool do_commit) override
Commit pending output.
PersistencySvc class implementation definition.
StatusCode fillRepRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Implementation of IConverter: Resolve the references of the converted object.
SmartIF< IConversionSvc > m_cnvService
StatusCode addCnvService(IConversionSvc *service) override
Add a new Service.
StatusCode removeCnvService(long type) override
Remove a Service.
StatusCode updateObj(IOpaqueAddress *pAddress, DataObject *refpObject) override
Implementation of IConverter: Update the transient object from the other representation.
~PersistencySvc() override=default
Standard Destructor.
StatusCode createAddress(long svc_type, const CLID &clid, const std::string *pars, const unsigned long *ipars, IOpaqueAddress *&refpAddress) override
Create a Generic address using explicit arguments to identify a single object.
SmartIF< IConversionSvc > & conversionSvc() const override
Get conversion service the converter is connected to.
Property base class allowing Property* collections to be "homogeneous".
Definition: Property.h:38
long m_serviceType
SmartIF< IDataProviderSvc > & dataProvider() const override
Access reference to transient datastore.
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
StatusCode createObj(IOpaqueAddress *pAddress, DataObject *&refpObject) override
Implementation of IConverter: Create the transient representation of an object.
Services m_cnvServices
List of convermsion workers.
StatusCode setAddressCreator(IAddressCreator *creator) override
Set address creator facility.
void decodeAddrHdr(const std::string &address, long &service_type, CLID &clid, std::string &address_trailer) const
Retrieve storage type and clid from address header of string.
SmartIF< IAddressCreator > m_addrCreator
Opaque address interface definition.
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
StatusCode setDefaultCnvService(long type) override
Set default service type.
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
StatusCode updateRepRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Implementation of IConverter: Update the references of an already converted object.
string type
Definition: gaudirun.py:151
SmartIF< IDataProviderSvc > m_dataSvc
Pointer to datma provider service.
IConverter * converter(const CLID &clid) override
Retrieve converter from list.