hlcc 2.0.0-beta2+pre1
Loading...
Searching...
No Matches
ciiOldbDataPointMux.hpp
Go to the documentation of this file.
1/*
2 * ciiOldbDataPointMux.hpp
3 *
4 * Created on: Feb 08, 2022
5 * Author: M.Schilling
6 */
7
8// msc Notes:
9// 1) I started this as a subclass of CiiOldbDataPoint, intending to override
10// the WriteValue methods in the superclass, for which I needed to make these methods
11// virtual in the super class first (polymorphism won't work otherwise) but couldn't
12// get it to work. It would have meant a change in CII, which is anyway undesirable now.
13
14#ifndef HLCC_OLDBMUX_CIIOLDBDATAPOINTMUX_HPP_
15#define HLCC_OLDBMUX_CIIOLDBDATAPOINTMUX_HPP_
16
17#include "ciiOldbDataPoint.hpp"
18#include "ciiOldbDpValue.hpp"
19#include "ciiOldbDpQuality.hpp"
20#include <string>
21#include <cstddef>
22#include <vector>
23#include <mal/utility/Uri.hpp>
24
25#include <ciiLogManager.hpp>
26
27namespace hlcc::oldbmux {
28
35template<typename T>
37
38public:
39
40 // Additional API
41 // -----------------------------------------
42
43 explicit CiiOldbDataPointMux (std::shared_ptr<::elt::oldb::CiiOldbDataPoint<T>> mainDp);
44
45 void AddSecondary (::elt::mal::Uri& uri);
46
47 // Reproduce the Public API of CiiOldbDataPoint
48 // -----------------------------------------
49
50 std::shared_ptr<::elt::oldb::CiiOldbDpValue<T>> ReadValue(bool check_bad_quality = true);
51
52 void WriteValue(
53 const T& value,
54 int64_t timestamp = ::elt::oldb::CiiOldbUtil::Now(),
55 bool is_disable_publishing = false);
56
57 void WriteValue(
58 const T& value,
59 int64_t timestamp,
60 ::elt::oldb::CiiOldbDpQuality quality,
61 const bool is_disable_publish = false,
62 const std::string *overridden_server_alias = nullptr,
63 const std::size_t *overriden_value_size_limit_remotefs = nullptr);
64
65 void WriteValue(
66 std::istream& value,
67 std::uint64_t size,
68 int64_t timestamp = ::elt::oldb::CiiOldbUtil::Now());
69
70 void WriteValue(
71 std::istream& value,
72 std::uint64_t size,
73 int64_t timestamp,
74 ::elt::oldb::CiiOldbDpQuality quality);
75
76 void Subscribe(
77 const std::shared_ptr<::elt::oldb::CiiOldbDpSubscription<T>>& listener,
78 bool answer_immediately = false);
79
80 void Unsubscribe(const std::shared_ptr<::elt::oldb::CiiOldbDpSubscription<T>>& listener);
81
82 std::shared_ptr<::elt::config::classes::meta::MdOldb<T>> GetMetadata() const;
83
84 void SetMetadata(const std::string& meta_data_instance_name);
85
86 void SetQuality(::elt::oldb::CiiOldbDpQuality quality);
87
88 ::elt::common::CiiBasicDataType GetType() const;
89
90protected:
91
92 std::shared_ptr<::elt::oldb::CiiOldbDataPoint<T>> m_mainDp;
93
94 std::vector<std::shared_ptr<::elt::oldb::CiiOldbDataPoint<T>>> m_secondaries;
95
96 const std::string LOGGER_NAME = "hlcc.OldbMux";
97 log4cplus::Logger logger = elt::log::CiiLogManager::GetLogger(LOGGER_NAME);
98
99};
100
101// Additional API
102// ----------------------
103
104template<typename T>
106 std::shared_ptr<::elt::oldb::CiiOldbDataPoint<T>> mainDp)
107: m_mainDp {mainDp} {
108}
109
110template<typename T>
112 ::elt::mal::Uri& uri) {
113
114 auto oldb = ::elt::oldb::CiiOldbFactory::GetInstance();
115 auto dp = oldb->GetDataPoint<T>(uri);
116 m_secondaries.push_back(dp);
117}
118
119// Original API, delegating
120// --------------------------
121// This delegates mostly to main-DP.
122// On selected methods (modifiers) delegates also to the mirror DPs.
123
124template<typename T>
125std::shared_ptr<::elt::oldb::CiiOldbDpValue<T>>
126CiiOldbDataPointMux<T>::ReadValue(bool check_bad_quality) {
127 return m_mainDp->ReadValue (check_bad_quality);
128}
129
130template<typename T>
132 const T& value, int64_t timestamp, bool is_disable_publishing) {
133
134 m_mainDp->WriteValue(value, timestamp, is_disable_publishing);
135
136 for (std::shared_ptr<::elt::oldb::CiiOldbDataPoint<T>> dp : m_secondaries) {
137 dp->WriteValue(value, timestamp, is_disable_publishing);
138 }
139}
140
141template<typename T>
143 const T& value,
144 int64_t timestamp,
145 ::elt::oldb::CiiOldbDpQuality quality,
146 const bool is_disable_publish,
147 const std::string *overridden_server_alias,
148 const std::size_t *overriden_value_size_limit_remotefs) {
149
150 m_mainDp->WriteValue(value, timestamp, quality, is_disable_publish,
151 overridden_server_alias, overriden_value_size_limit_remotefs);
152
153 for (std::shared_ptr<::elt::oldb::CiiOldbDataPoint<T>> dp : m_secondaries) {
154 dp->WriteValue(value, timestamp, quality, is_disable_publish,
155 overridden_server_alias, overriden_value_size_limit_remotefs);
156 }
157}
158
159template<typename T>
161 std::istream& value,
162 std::uint64_t size,
163 int64_t timestamp) {
164
165 m_mainDp->WriteValue(value, size, timestamp);
166
167 for (std::shared_ptr<::elt::oldb::CiiOldbDataPoint<T>> dp : m_secondaries) {
168 dp->WriteValue(value, size, timestamp);
169 }
170}
171
172template<typename T>
174 std::istream& value,
175 std::uint64_t size,
176 int64_t timestamp,
177 ::elt::oldb::CiiOldbDpQuality quality) {
178
179 m_mainDp->WriteValue(value, size, timestamp, quality);
180
181 for (std::shared_ptr<::elt::oldb::CiiOldbDataPoint<T>> dp : m_secondaries) {
182 dp->WriteValue(value, size, timestamp, quality);
183 }
184}
185
186template<typename T>
188 const std::shared_ptr<::elt::oldb::CiiOldbDpSubscription<T>>& listener,
189 bool answer_immediately) {
190
191 m_mainDp->Subscribe(listener, answer_immediately);
192}
193
194template<typename T>
196 const std::shared_ptr<::elt::oldb::CiiOldbDpSubscription<T> >& listener) {
197
198 m_mainDp->Unscribe(listener);
199}
200
201template<typename T>
202std::shared_ptr<::elt::config::classes::meta::MdOldb<T>>
204
205 return m_mainDp->GetMetadata();
206}
207
208template<typename T>
210 const std::string& meta_data_instance_name) {
211
212 m_mainDp->SetMetadata(meta_data_instance_name);
213
214 for (std::shared_ptr<::elt::oldb::CiiOldbDataPoint<T>> dp : m_secondaries) {
215 dp->SetMetadata(meta_data_instance_name);
216 }
217
218}
219
220template<typename T>
222 ::elt::oldb::CiiOldbDpQuality quality) {
223
224 m_mainDp->SetQuality(quality);
225
226 for (std::shared_ptr<::elt::oldb::CiiOldbDataPoint<T>> dp : m_secondaries) {
227 dp->SetQuality(quality);
228 }
229}
230
231template<typename T>
232::elt::common::CiiBasicDataType CiiOldbDataPointMux<T>::GetType() const {
233
234 return m_mainDp->getType();
235}
236
237}
238// namespace
239
240#endif
241
CiiOldbDataPointMux is a wrapper for multiple CiiOldbDataPoints, to allow writing changes (to value,...
Definition: ciiOldbDataPointMux.hpp:36
CiiOldbDataPointMux(std::shared_ptr<::elt::oldb::CiiOldbDataPoint< T > > mainDp)
Definition: ciiOldbDataPointMux.hpp:105
std::shared_ptr<::elt::config::classes::meta::MdOldb< T > > GetMetadata() const
Definition: ciiOldbDataPointMux.hpp:203
std::vector< std::shared_ptr<::elt::oldb::CiiOldbDataPoint< T > > > m_secondaries
Definition: ciiOldbDataPointMux.hpp:94
void SetMetadata(const std::string &meta_data_instance_name)
Definition: ciiOldbDataPointMux.hpp:209
void Subscribe(const std::shared_ptr<::elt::oldb::CiiOldbDpSubscription< T > > &listener, bool answer_immediately=false)
Definition: ciiOldbDataPointMux.hpp:187
const std::string LOGGER_NAME
Definition: ciiOldbDataPointMux.hpp:96
void SetQuality(::elt::oldb::CiiOldbDpQuality quality)
Definition: ciiOldbDataPointMux.hpp:221
std::shared_ptr<::elt::oldb::CiiOldbDpValue< T > > ReadValue(bool check_bad_quality=true)
Definition: ciiOldbDataPointMux.hpp:126
void AddSecondary(::elt::mal::Uri &uri)
Definition: ciiOldbDataPointMux.hpp:111
::elt::common::CiiBasicDataType GetType() const
Definition: ciiOldbDataPointMux.hpp:232
std::shared_ptr<::elt::oldb::CiiOldbDataPoint< T > > m_mainDp
Definition: ciiOldbDataPointMux.hpp:92
void Unsubscribe(const std::shared_ptr<::elt::oldb::CiiOldbDpSubscription< T > > &listener)
Definition: ciiOldbDataPointMux.hpp:195
void WriteValue(const T &value, int64_t timestamp=::elt::oldb::CiiOldbUtil::Now(), bool is_disable_publishing=false)
Definition: ciiOldbDataPointMux.hpp:131
log4cplus::Logger logger
Definition: ciiOldbDataPointMux.hpp:97
Definition: ciiOldbDataPointAsync.hpp:30