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