1 /*
2 * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "sharing_data.h"
17 #include "common/media_log.h"
18
19 namespace OHOS {
20 namespace Sharing {
IsInt32()21 bool SharingValue::IsInt32()
22 {
23 SHARING_LOGD("trace.");
24 if (data_.index() == static_cast<std::size_t>(SharingIndex::VALUE_INDEX_INT32)) {
25 return true;
26 }
27
28 return false;
29 }
30
IsBool()31 bool SharingValue::IsBool()
32 {
33 SHARING_LOGD("trace.");
34 if (data_.index() == static_cast<std::size_t>(SharingIndex::VALUE_INDEX_BOOL)) {
35 return true;
36 }
37
38 return false;
39 }
40
IsString()41 bool SharingValue::IsString()
42 {
43 SHARING_LOGD("trace.");
44 if (data_.index() == static_cast<std::size_t>(SharingIndex::VALUE_INDEX_STRING)) {
45 return true;
46 }
47
48 return false;
49 }
50
IsVector()51 bool SharingValue::IsVector()
52 {
53 SHARING_LOGD("trace.");
54 if (data_.index() == static_cast<std::size_t>(SharingIndex::VALUE_INDEX_VECTOR)) {
55 return true;
56 }
57
58 return false;
59 }
60
Print()61 void SharingValue::Print()
62 {
63 SHARING_LOGD("trace.");
64 if (IsInt32()) {
65 int32_t value = 0;
66 GetValue(value);
67 SHARING_LOGD("print %{public}d.", value);
68 } else if (IsBool()) {
69 bool value = 0;
70 GetValue(value);
71 SHARING_LOGD("print %{public}d.", value);
72 } else if (IsString()) {
73 std::string value("");
74 GetValue(value);
75 SHARING_LOGD("print %{public}s.", value.c_str());
76 } else if (IsVector()) {
77 std::vector<int32_t> value{};
78 GetValue(value);
79 for (auto &item : value) {
80 SHARING_LOGD("print %{public}d.", item);
81 }
82 }
83 }
84
PutSharingValue(const std::string &key, const SharingValue::Ptr value)85 int32_t SharingDataGroupByTag::PutSharingValue(const std::string &key, const SharingValue::Ptr value)
86 {
87 SHARING_LOGD("trace.");
88 auto iter = datas_.find(key);
89 if (iter == datas_.end()) {
90 datas_.emplace(key, value);
91 } else {
92 iter->second = value;
93 }
94
95 return CONFIGURE_ERROR_NONE;
96 }
97
PutSharingValues(const std::unordered_map<std::string, SharingValue::Ptr> &values)98 int32_t SharingDataGroupByTag::PutSharingValues(const std::unordered_map<std::string, SharingValue::Ptr> &values)
99 {
100 SHARING_LOGD("trace.");
101 datas_ = values;
102 return CONFIGURE_ERROR_NONE;
103 }
104
GetSharingValue(const std::string &key)105 SharingValue::Ptr SharingDataGroupByTag::GetSharingValue(const std::string &key)
106 {
107 SHARING_LOGD("trace.");
108 SharingValue::Ptr value = nullptr;
109 auto iter = datas_.find(key);
110 if (iter != datas_.end()) {
111 value = iter->second;
112 }
113
114 return value;
115 }
116
GetSharingValues(std::unordered_map<std::string, SharingValue::Ptr> &values)117 int32_t SharingDataGroupByTag::GetSharingValues(std::unordered_map<std::string, SharingValue::Ptr> &values)
118 {
119 SHARING_LOGD("trace.");
120 values = datas_;
121 return CONFIGURE_ERROR_NONE;
122 }
123
HasKey(const std::string &key)124 bool SharingDataGroupByTag::HasKey(const std::string &key)
125 {
126 SHARING_LOGD("trace.");
127 return datas_.find(key) != datas_.end();
128 }
129
ForEach(Each each)130 void SharingDataGroupByTag::ForEach(Each each)
131 {
132 SHARING_LOGD("trace.");
133 auto iter = datas_.begin();
134 while (iter != datas_.end()) {
135 std::string key = iter->first;
136 each(key, iter->second);
137 iter++;
138 }
139 }
140
Print()141 void SharingDataGroupByTag::Print()
142 {
143 SHARING_LOGD("trace.");
144 auto iter = datas_.begin();
145 while (iter != datas_.end()) {
146 std::string key = iter->first;
147 SharingValue::Ptr value = iter->second;
148 value->Print();
149 iter++;
150 }
151 }
152
PutSharingValue(const std::string &tag, const std::string &key, const SharingValue::Ptr value)153 int32_t SharingDataGroupByModule::PutSharingValue(const std::string &tag, const std::string &key,
154 const SharingValue::Ptr value)
155 {
156 SHARING_LOGD("trace.");
157 auto iter = datass_.find(tag);
158 if (iter == datass_.end()) {
159 auto grpData = std::make_shared<SharingDataGroupByTag>(tag);
160 if (grpData == nullptr) {
161 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
162 return CONFIGURE_ERROR_NOT_FIND;
163 }
164 grpData->PutSharingValue(key, value);
165 datass_.emplace(std::make_pair(tag, grpData));
166 return CONFIGURE_ERROR_NONE;
167 }
168
169 return iter->second->PutSharingValue(key, value);
170 }
171
PutSharingValues(const std::string &tag, const std::unordered_map<std::string, SharingValue::Ptr> &values)172 int32_t SharingDataGroupByModule::PutSharingValues(const std::string &tag,
173 const std::unordered_map<std::string, SharingValue::Ptr> &values)
174 {
175 SHARING_LOGD("trace.");
176 auto iter = datass_.find(tag);
177 if (iter == datass_.end()) {
178 auto grpData = std::make_shared<SharingDataGroupByTag>(tag);
179 if (grpData == nullptr) {
180 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
181 return CONFIGURE_ERROR_NOT_FIND;
182 }
183 grpData->PutSharingValues(values);
184 datass_.emplace(std::make_pair(tag, grpData));
185 return CONFIGURE_ERROR_NONE;
186 }
187
188 return iter->second->PutSharingValues(values);
189 }
190
PutSharingValues(const std::string &tag, const SharingDataGroupByTag::Ptr &value)191 int32_t SharingDataGroupByModule::PutSharingValues(const std::string &tag, const SharingDataGroupByTag::Ptr &value)
192 {
193 SHARING_LOGD("trace.");
194 auto iter = datass_.find(tag);
195 if (iter == datass_.end()) {
196 datass_.emplace(std::make_pair(tag, value));
197 return CONFIGURE_ERROR_NONE;
198 }
199
200 iter->second = value;
201 return CONFIGURE_ERROR_NONE;
202 }
203
GetSharingValue(const std::string &tag, const std::string &key)204 SharingValue::Ptr SharingDataGroupByModule::GetSharingValue(const std::string &tag, const std::string &key)
205 {
206 SHARING_LOGD("trace.");
207 auto iter = datass_.find(tag);
208 if (iter == datass_.end()) {
209 SHARING_LOGE("nullptr.");
210 return nullptr;
211 }
212
213 return iter->second->GetSharingValue(key);
214 }
215
GetSharingValues(const std::string &tag, std::unordered_map<std::string, SharingValue::Ptr> &values)216 int32_t SharingDataGroupByModule::GetSharingValues(const std::string &tag,
217 std::unordered_map<std::string, SharingValue::Ptr> &values)
218 {
219 SHARING_LOGD("trace.");
220 auto iter = datass_.find(tag);
221 if (iter == datass_.end()) {
222 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
223 return CONFIGURE_ERROR_NOT_FIND;
224 }
225
226 return iter->second->GetSharingValues(values);
227 }
228
GetSharingValues(const std::string &tag, SharingDataGroupByTag::Ptr &value)229 int32_t SharingDataGroupByModule::GetSharingValues(const std::string &tag, SharingDataGroupByTag::Ptr &value)
230 {
231 SHARING_LOGD("trace.");
232 auto iter = datass_.find(tag);
233 if (iter == datass_.end()) {
234 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
235 return CONFIGURE_ERROR_NOT_FIND;
236 }
237
238 value = iter->second;
239 return CONFIGURE_ERROR_NONE;
240 }
241
HasKey(const std::string &tag, const std::string &key)242 bool SharingDataGroupByModule::HasKey(const std::string &tag, const std::string &key)
243 {
244 SHARING_LOGD("trace.");
245 auto iter = datass_.find(tag);
246 if (iter == datass_.end()) {
247 return false;
248 }
249
250 return iter->second->HasKey(key);
251 }
252
HasTag(const std::string &tag)253 bool SharingDataGroupByModule::HasTag(const std::string &tag)
254 {
255 SHARING_LOGD("trace.");
256 return datass_.find(tag) != datass_.end();
257 }
258
ForEach(Each each)259 void SharingDataGroupByModule::ForEach(Each each)
260 {
261 SHARING_LOGD("trace.");
262 auto iter = datass_.begin();
263 while (iter != datass_.end()) {
264 std::string key = iter->first;
265 each(key, iter->second);
266 iter++;
267 }
268 }
269
Print()270 void SharingDataGroupByModule::Print()
271 {
272 SHARING_LOGD("trace.");
273 auto iter = datass_.begin();
274 while (iter != datass_.end()) {
275 SHARING_LOGD("forEach print %{public}s.", iter->first.c_str());
276 SharingDataGroupByTag::Ptr value = iter->second;
277 value->Print();
278 iter++;
279 }
280 }
281
PutSharingValue(const std::string &key, const SharingValue::Ptr value, const std::string &module, const std::string &tag)282 int32_t SharingData::PutSharingValue(const std::string &key, const SharingValue::Ptr value, const std::string &module,
283 const std::string &tag)
284 {
285 SHARING_LOGD("trace.");
286 auto iter = datass_.find(module);
287 if (iter == datass_.end()) {
288 auto moduleData = std::make_shared<SharingDataGroupByModule>(module);
289 if (moduleData == nullptr) {
290 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
291 return CONFIGURE_ERROR_NOT_FIND;
292 }
293 moduleData->PutSharingValue(tag, key, value);
294 datass_.emplace(std::make_pair(module, moduleData));
295 return CONFIGURE_ERROR_NONE;
296 }
297
298 return iter->second->PutSharingValue(tag, key, value);
299 }
PutSharingValues(const SharingDataGroupByModule::Ptr &values, const std::string &module)300 int32_t SharingData::PutSharingValues(const SharingDataGroupByModule::Ptr &values, const std::string &module)
301 {
302 SHARING_LOGD("trace.");
303 auto iter = datass_.find(module);
304 if (iter == datass_.end()) {
305 datass_.emplace(std::make_pair(module, values));
306 return CONFIGURE_ERROR_NONE;
307 }
308
309 iter->second = values;
310 return CONFIGURE_ERROR_NONE;
311 }
312
PutSharingValues(const std::unordered_map<std::string, SharingValue::Ptr> &values, const std::string &module, const std::string &tag)313 int32_t SharingData::PutSharingValues(const std::unordered_map<std::string, SharingValue::Ptr> &values,
314 const std::string &module, const std::string &tag)
315 {
316 SHARING_LOGD("trace.");
317 auto iter = datass_.find(module);
318 if (iter == datass_.end()) {
319 auto moduleData = std::make_shared<SharingDataGroupByModule>(module);
320 if (moduleData == nullptr) {
321 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
322 return CONFIGURE_ERROR_NOT_FIND;
323 }
324 moduleData->PutSharingValues(tag, values);
325 datass_.emplace(std::make_pair(module, moduleData));
326 return CONFIGURE_ERROR_NONE;
327 }
328
329 return iter->second->PutSharingValues(tag, values);
330 }
331
GetSharingValue(const std::string &key, const std::string &module, const std::string &tag)332 SharingValue::Ptr SharingData::GetSharingValue(const std::string &key, const std::string &module,
333 const std::string &tag)
334 {
335 SHARING_LOGD("trace.");
336 auto iter = datass_.find(module);
337 if (iter == datass_.end()) {
338 return nullptr;
339 }
340
341 return iter->second->GetSharingValue(tag, key);
342 }
343
GetSharingValues(SharingDataGroupByModule::Ptr &values, const std::string &module)344 int32_t SharingData::GetSharingValues(SharingDataGroupByModule::Ptr &values, const std::string &module)
345 {
346 SHARING_LOGD("trace.");
347 auto iter = datass_.find(module);
348 if (iter == datass_.end()) {
349 return CONFIGURE_ERROR_NOT_FIND;
350 }
351
352 values = iter->second;
353 return CONFIGURE_ERROR_NONE;
354 }
355
GetSharingValues(std::unordered_map<std::string, SharingValue::Ptr> &values, const std::string &module, const std::string &tag)356 int32_t SharingData::GetSharingValues(std::unordered_map<std::string, SharingValue::Ptr> &values,
357 const std::string &module, const std::string &tag)
358 {
359 SHARING_LOGD("trace.");
360 auto iter = datass_.find(module);
361 if (iter == datass_.end()) {
362 return CONFIGURE_ERROR_NOT_FIND;
363 }
364
365 return iter->second->GetSharingValues(tag, values);
366 }
367
GetSharingValues(SharingDataGroupByTag::Ptr &value, const std::string &module, const std::string &tag)368 int32_t SharingData::GetSharingValues(SharingDataGroupByTag::Ptr &value, const std::string &module,
369 const std::string &tag)
370 {
371 SHARING_LOGD("trace.");
372 auto iter = datass_.find(module);
373 if (iter == datass_.end()) {
374 return CONFIGURE_ERROR_NOT_FIND;
375 }
376
377 return iter->second->GetSharingValues(tag, value);
378 }
379
HasKey(const std::string &key, const std::string &module, const std::string &tag)380 bool SharingData::HasKey(const std::string &key, const std::string &module, const std::string &tag)
381 {
382 SHARING_LOGD("trace.");
383 auto iter = datass_.find(module);
384 if (iter == datass_.end()) {
385 return false;
386 }
387
388 return iter->second->HasKey(tag, key);
389 }
390
HasModule(const std::string &module)391 bool SharingData::HasModule(const std::string &module)
392 {
393 SHARING_LOGD("trace.");
394 return datass_.find(module) != datass_.end();
395 }
396
HasTag(const std::string &module, const std::string &tag)397 bool SharingData::HasTag(const std::string &module, const std::string &tag)
398 {
399 SHARING_LOGD("trace.");
400 auto iter = datass_.find(module);
401 if (iter == datass_.end()) {
402 return false;
403 }
404
405 return iter->second->HasTag(tag);
406 }
407
ForEach(Each each)408 void SharingData::ForEach(Each each)
409 {
410 SHARING_LOGD("trace.");
411 auto iter = datass_.begin();
412 while (iter != datass_.end()) {
413 std::string key = iter->first;
414 SHARING_LOGD("forEach %{public}s.", key.c_str());
415 each(key, iter->second);
416 iter++;
417 }
418 }
419
Print()420 void SharingData::Print()
421 {
422 SHARING_LOGD("trace.");
423 auto iter = datass_.begin();
424 while (iter != datass_.end()) {
425 SHARING_LOGD("forEach print %{public}s.", iter->first.c_str());
426 SharingDataGroupByModule::Ptr value = iter->second;
427 value->Print();
428 iter++;
429 }
430 }
431
432 } // namespace Sharing
433 } // namespace OHOS