RTC Toolkit 5.0.0
Loading...
Searching...
No Matches
oldbAdapterLegacy.hpp
Go to the documentation of this file.
1
13#ifndef RTCTK_COMPONENTFRAMEWORK_OLDBADAPTERLEGACY_HPP
14#define RTCTK_COMPONENTFRAMEWORK_OLDBADAPTERLEGACY_HPP
15
18
19#include <ciiOldb.hpp>
20#include <ciiOldbSubscription.hpp>
21#include <ciiOldbTypedDataBase.hpp>
22
23#include <functional>
24#include <typeindex>
25
27
39class OldbAdapterLegacy : public OldbIf {
40public:
41 inline static const std::string SUPPORTED_URI_SCHEME = "cii.oldb.legacy";
42
45
48
51
54
57
63 explicit OldbAdapterLegacy(const elt::mal::Uri& baseuri);
64
71 explicit OldbAdapterLegacy(const elt::mal::Uri& baseuri,
72 const std::shared_ptr<elt::oldb::CiiOldb>& oldb);
73
77 virtual ~OldbAdapterLegacy();
78
86 elt::mal::Uri GetBaseUri() const {
87 return m_baseuri;
88 }
89
91
109 void CreateDataPoint(const DataPointPath& path, const std::type_info& type) override;
110
111protected:
126 void DeleteDataPointLegacy(const DataPointPath& path) override;
127
144 const std::type_info& GetDataPointTypeLegacy(const DataPointPath& path) const override;
145
166 std::size_t GetDataPointSizeLegacy(const DataPointPath& path) const override;
167
168 bool DataPointExistsLegacy(const DataPointPath& path) const override;
169 std::pair<PathList, PathList> GetChildrenLegacy(const DataPointPath& path) const override;
170
171public:
172 Response SendReadRequest(const ReadRequest& request) const override;
174 Response SendSubscribeRequest(const SubscribeRequest& request) const override;
176
192 static void InitMetadata();
193
194protected:
204 void SetMetadataInstanceMap(const std::map<std::type_index, std::string>& map);
205
215 void SetTypeInfoMap(const std::map<std::string, const std::type_info&>& map);
216
224 elt::oldb::CiiOldbDpCreateContext GetDataPointCreateContext() const;
225
233 void SetDataPointCreateContext(elt::oldb::CiiOldbDpCreateContext& context);
234
235private:
252 template <typename R, typename F>
253 Response ProcessRequest(const R& request, F selector) const;
254
261 template <typename T>
262 void ReadData(const DataPointPath& path, T& buffer) const;
263
270 template <typename T>
271 void WriteData(const DataPointPath& path, const T& buffer) const;
272
278 template <typename T>
279 void RegisterSubscription(const SubscribeRequest::Parameters& params) const;
280
282 struct IoFunctionMapEntry {
283 using ReadFunction =
284 std::function<void(const OldbAdapterLegacy*, const DataPointPath&, void*)>;
285 using WriteFunction =
286 std::function<void(const OldbAdapterLegacy*, const DataPointPath&, const void*)>;
287 using RegisterFunction =
288 std::function<void(const OldbAdapterLegacy*, const SubscribeRequest::Parameters&)>;
289
290 ReadFunction m_read_function;
291 WriteFunction m_write_function;
292 RegisterFunction m_register_function;
293 };
294
296 using IoFunctionMap = std::map<std::type_index, IoFunctionMapEntry>;
297
303 template <typename T>
304 static auto MakeMapEntry();
305
307 struct SubscriptionEntry {
308 std::shared_ptr<elt::oldb::CiiOldbTypedDataBase> m_datapoint;
309 std::shared_ptr<elt::oldb::CiiOldbDpSubscriptionBase> m_subscription;
310
318 std::function<bool(const SubscriptionEntry&, const UnsubscribeRequest::Parameters&)>
319 m_unregister_callback;
320 };
321
322 using SubsciptionMap = std::list<SubscriptionEntry>;
323
333 template <typename T, typename U>
334 void CastAndRegisterSubscription(
335 const SubscribeRequest::Parameters& params,
336 const std::shared_ptr<elt::oldb::CiiOldbTypedDataBase>& datapoint,
337 std::function<void(T*, const std::shared_ptr<elt::oldb::CiiOldbDpValue<U>>&)>
338 write_function) const;
339
341 mutable std::shared_ptr<elt::oldb::CiiOldb> m_client;
342
347 const elt::mal::Uri m_baseuri;
348
350 mutable std::list<SubscriptionEntry> m_subscriptions;
351
353 mutable std::mutex m_mutex;
354
356 const std::map<std::type_index, std::string>* m_metadata_instance_map = nullptr;
357
359 static const std::map<std::type_index, std::string> S_METADATA_INSTANCE_MAP;
360
362 const std::map<std::string, const std::type_info&>* m_type_info_map = nullptr;
363
365 static const std::map<std::string, const std::type_info&> S_TYPE_INFO_MAP;
366
368 static const IoFunctionMap S_IO_FUNCTIONS;
369
370 // The following helper methods and mappings redirect calls from the new API to the legacy
371 // implementation methods.
372 template <typename T>
373 void CreateImpl(detail::CreateRequest<T>& req);
374
375 template <typename T>
376 void ReadImpl(detail::ReadRequest<T>& req);
377
378 template <typename T>
379 void WriteImpl(detail::WriteRequest<T>& req);
380
381 template <typename T>
382 void PartialReadImpl(detail::PartialReadRequest<T>& req);
383
384 template <typename T>
385 void PartialWriteImpl(detail::PartialWriteRequest<T>& req);
386
387 void ReadMetaDataImpl(detail::ReadMetaDataRequest& req);
388 void WriteMetaDataImpl(detail::WriteMetaDataRequest& req);
389 void DeleteImpl(detail::DeleteRequest& req);
390 void ExistsImpl(detail::ExistsRequest& req);
391 void GetChildrenImpl(detail::GetChildrenRequest& req);
392 void CreateLinkImpl(detail::CreateSymlinkRequest& req);
393 void UpdateLinkImpl(detail::UpdateSymlinkRequest& req);
394 void SubscribeImpl(detail::ValueSubscribeRequest& req);
395 void CreateDeleteSubscribeImpl(detail::CreateDeleteSubscribeRequest& req);
396 void UnsubscribeImpl(detail::UnsubscribeRequest& req);
397
398 BatchResponse ProcessRequests(const RequestList& requests) override;
399
400 template <typename T>
401 static RequestDispatcher<OldbAdapterLegacy>::TableEntries BindTypeHandlers();
402
403 static const RequestDispatcher<OldbAdapterLegacy> S_REQUEST_DISPATCHER;
404};
405
406} // namespace rtctk::componentFramework
407
408#endif // RTCTK_COMPONENTFRAMEWORK_OLDBADAPTERLEGACY_HPP
This class provides a wrapper for a data point path.
Definition dataPointPath.hpp:74
Provides access to the OLDB to read and write datapoints.
Definition oldbAdapterLegacy.hpp:39
void SetDataPointCreateContext(elt::oldb::CiiOldbDpCreateContext &context)
Sets a new datapoint creation context on the underlying OLDB client object.
Definition oldbAdapterLegacy.cpp:1225
OldbAdapterLegacy & operator=(const OldbAdapterLegacy &)=delete
This class cannot be copy assigned.
Response SendReadRequest(const ReadRequest &request) const override
Sends a request to read data from the repository.
Definition oldbAdapterLegacy.cpp:636
elt::mal::Uri GetBaseUri() const
Get the base URI used when creating this adapter object.
Definition oldbAdapterLegacy.hpp:86
const std::type_info & GetDataPointTypeLegacy(const DataPointPath &path) const override
Retrieves the corresponding C++ type for the datapoint from the OLDB.
Definition oldbAdapterLegacy.cpp:367
elt::oldb::CiiOldbDpCreateContext GetDataPointCreateContext() const
Get the datapoint creation context used by the underlying OLDB client object.
Definition oldbAdapterLegacy.cpp:1221
OldbAdapterLegacy(const OldbAdapterLegacy &)=delete
This class cannot be copy constructed.
void SetTypeInfoMap(const std::map< std::string, const std::type_info & > &map)
Sets the OLDB metadata instance name to type_info map.
Definition oldbAdapterLegacy.cpp:1217
bool DataPointExistsLegacy(const DataPointPath &path) const override
Checks for the existence of a datapoint in the repository.
Definition oldbAdapterLegacy.cpp:610
OldbAdapterLegacy(OldbAdapterLegacy &&)=default
Objects of this class can be moved.
std::pair< PathList, PathList > GetChildrenLegacy(const DataPointPath &path) const override
Queries the datapoints and child paths for a given path.
Definition oldbAdapterLegacy.cpp:616
void DeleteDataPointLegacy(const DataPointPath &path) override
Deletes a datapoint in the OLDB.
Definition oldbAdapterLegacy.cpp:362
virtual ~OldbAdapterLegacy()
Destroys the adapter for the OLDB service releasing allocated resources.
Definition oldbAdapterLegacy.cpp:337
static const std::string SUPPORTED_URI_SCHEME
Definition oldbAdapterLegacy.hpp:41
static void InitMetadata()
Initialises the type metadata in the CII configuration service for the OLDB.
Definition oldbAdapterLegacy.cpp:802
Response SendUnsubscribeRequest(const UnsubscribeRequest &request) const override
This is called to asynchronously send a request to unsubscribe from various notifications.
Definition oldbAdapterLegacy.cpp:773
void CreateDataPoint(const DataPointPath &path, const std::type_info &type) override
Creates a new datapoint in the OLDB.
Definition oldbAdapterLegacy.cpp:340
void SetMetadataInstanceMap(const std::map< std::type_index, std::string > &map)
Sets the type_index to OLDB metadata instance name map.
Definition oldbAdapterLegacy.cpp:1174
OldbAdapterLegacy & operator=(OldbAdapterLegacy &&)=default
Objects of this class can be moved with the move assignment operator.
OldbAdapterLegacy()=delete
Do not allow construction with no arguments.
std::size_t GetDataPointSizeLegacy(const DataPointPath &path) const override
Returns the size of a datapoint in the OLDB.
Definition oldbAdapterLegacy.cpp:492
Response SendWriteRequest(const WriteRequest &request) override
Sends a request to write data to the repository.
Definition oldbAdapterLegacy.cpp:640
Response SendSubscribeRequest(const SubscribeRequest &request) const override
This is called to asynchronously send a subscription request for datapoints.
Definition oldbAdapterLegacy.cpp:747
Base interface for all OLDB adapters.
Definition oldbIf.hpp:25
An object used to wait for a request to complete.
Definition repositoryIf.hpp:1354
void CreateDataPoint(const DataPointPath &path)
Creates a new datapoint in the repository.
Definition repositoryIf.ipp:1696
std::vector< std::any > RequestList
Definition repositoryIf.hpp:106
Definition commandReplier.cpp:22
elt::mal::future< std::string > InjectReqRepEvent(StateMachineEngine &engine)
Definition malEventInjector.hpp:23
Header file for OldbIf, which defines the API for OldbAdapters.
Header file for the RequestDispatcher utility class.
Definition repositorySubscriberIf.ipp:41