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 if (value) {
149 value->Print();
150 }
151 iter++;
152 }
153 }
154
PutSharingValue(const std::string & tag,const std::string & key,const SharingValue::Ptr value)155 int32_t SharingDataGroupByModule::PutSharingValue(const std::string &tag, const std::string &key,
156 const SharingValue::Ptr value)
157 {
158 SHARING_LOGD("trace.");
159 auto iter = datass_.find(tag);
160 if (iter == datass_.end()) {
161 auto grpData = std::make_shared<SharingDataGroupByTag>(tag);
162 if (grpData == nullptr) {
163 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
164 return CONFIGURE_ERROR_NOT_FIND;
165 }
166 grpData->PutSharingValue(key, value);
167 datass_.emplace(std::make_pair(tag, grpData));
168 return CONFIGURE_ERROR_NONE;
169 }
170
171 return iter->second->PutSharingValue(key, value);
172 }
173
PutSharingValues(const std::string & tag,const std::unordered_map<std::string,SharingValue::Ptr> & values)174 int32_t SharingDataGroupByModule::PutSharingValues(const std::string &tag,
175 const std::unordered_map<std::string, SharingValue::Ptr> &values)
176 {
177 SHARING_LOGD("trace.");
178 auto iter = datass_.find(tag);
179 if (iter == datass_.end()) {
180 auto grpData = std::make_shared<SharingDataGroupByTag>(tag);
181 if (grpData == nullptr) {
182 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
183 return CONFIGURE_ERROR_NOT_FIND;
184 }
185 grpData->PutSharingValues(values);
186 datass_.emplace(std::make_pair(tag, grpData));
187 return CONFIGURE_ERROR_NONE;
188 }
189
190 return iter->second->PutSharingValues(values);
191 }
192
PutSharingValues(const std::string & tag,const SharingDataGroupByTag::Ptr & value)193 int32_t SharingDataGroupByModule::PutSharingValues(const std::string &tag, const SharingDataGroupByTag::Ptr &value)
194 {
195 SHARING_LOGD("trace.");
196 auto iter = datass_.find(tag);
197 if (iter == datass_.end()) {
198 datass_.emplace(std::make_pair(tag, value));
199 return CONFIGURE_ERROR_NONE;
200 }
201
202 iter->second = value;
203 return CONFIGURE_ERROR_NONE;
204 }
205
GetSharingValue(const std::string & tag,const std::string & key)206 SharingValue::Ptr SharingDataGroupByModule::GetSharingValue(const std::string &tag, const std::string &key)
207 {
208 SHARING_LOGD("trace.");
209 auto iter = datass_.find(tag);
210 if (iter == datass_.end()) {
211 SHARING_LOGE("nullptr.");
212 return nullptr;
213 }
214
215 return iter->second->GetSharingValue(key);
216 }
217
GetSharingValues(const std::string & tag,std::unordered_map<std::string,SharingValue::Ptr> & values)218 int32_t SharingDataGroupByModule::GetSharingValues(const std::string &tag,
219 std::unordered_map<std::string, SharingValue::Ptr> &values)
220 {
221 SHARING_LOGD("trace.");
222 auto iter = datass_.find(tag);
223 if (iter == datass_.end()) {
224 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
225 return CONFIGURE_ERROR_NOT_FIND;
226 }
227
228 return iter->second->GetSharingValues(values);
229 }
230
GetSharingValues(const std::string & tag,SharingDataGroupByTag::Ptr & value)231 int32_t SharingDataGroupByModule::GetSharingValues(const std::string &tag, SharingDataGroupByTag::Ptr &value)
232 {
233 SHARING_LOGD("trace.");
234 auto iter = datass_.find(tag);
235 if (iter == datass_.end()) {
236 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
237 return CONFIGURE_ERROR_NOT_FIND;
238 }
239
240 value = iter->second;
241 return CONFIGURE_ERROR_NONE;
242 }
243
HasKey(const std::string & tag,const std::string & key)244 bool SharingDataGroupByModule::HasKey(const std::string &tag, const std::string &key)
245 {
246 SHARING_LOGD("trace.");
247 auto iter = datass_.find(tag);
248 if (iter == datass_.end()) {
249 return false;
250 }
251
252 return iter->second->HasKey(key);
253 }
254
HasTag(const std::string & tag)255 bool SharingDataGroupByModule::HasTag(const std::string &tag)
256 {
257 SHARING_LOGD("trace.");
258 return datass_.find(tag) != datass_.end();
259 }
260
ForEach(Each each)261 void SharingDataGroupByModule::ForEach(Each each)
262 {
263 SHARING_LOGD("trace.");
264 auto iter = datass_.begin();
265 while (iter != datass_.end()) {
266 std::string key = iter->first;
267 each(key, iter->second);
268 iter++;
269 }
270 }
271
Print()272 void SharingDataGroupByModule::Print()
273 {
274 SHARING_LOGD("trace.");
275 auto iter = datass_.begin();
276 while (iter != datass_.end()) {
277 SHARING_LOGD("forEach print %{public}s.", iter->first.c_str());
278 SharingDataGroupByTag::Ptr value = iter->second;
279 if (value) {
280 value->Print();
281 }
282 iter++;
283 }
284 }
285
PutSharingValue(const std::string & key,const SharingValue::Ptr value,const std::string & module,const std::string & tag)286 int32_t SharingData::PutSharingValue(const std::string &key, const SharingValue::Ptr value, const std::string &module,
287 const std::string &tag)
288 {
289 SHARING_LOGD("trace.");
290 auto iter = datass_.find(module);
291 if (iter == datass_.end()) {
292 auto moduleData = std::make_shared<SharingDataGroupByModule>(module);
293 if (moduleData == nullptr) {
294 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
295 return CONFIGURE_ERROR_NOT_FIND;
296 }
297 moduleData->PutSharingValue(tag, key, value);
298 datass_.emplace(std::make_pair(module, moduleData));
299 return CONFIGURE_ERROR_NONE;
300 }
301
302 return iter->second->PutSharingValue(tag, key, value);
303 }
PutSharingValues(const SharingDataGroupByModule::Ptr & values,const std::string & module)304 int32_t SharingData::PutSharingValues(const SharingDataGroupByModule::Ptr &values, const std::string &module)
305 {
306 SHARING_LOGD("trace.");
307 auto iter = datass_.find(module);
308 if (iter == datass_.end()) {
309 datass_.emplace(std::make_pair(module, values));
310 return CONFIGURE_ERROR_NONE;
311 }
312
313 iter->second = values;
314 return CONFIGURE_ERROR_NONE;
315 }
316
PutSharingValues(const std::unordered_map<std::string,SharingValue::Ptr> & values,const std::string & module,const std::string & tag)317 int32_t SharingData::PutSharingValues(const std::unordered_map<std::string, SharingValue::Ptr> &values,
318 const std::string &module, const std::string &tag)
319 {
320 SHARING_LOGD("trace.");
321 auto iter = datass_.find(module);
322 if (iter == datass_.end()) {
323 auto moduleData = std::make_shared<SharingDataGroupByModule>(module);
324 if (moduleData == nullptr) {
325 SHARING_LOGE("CONFIGURE_ERROR_NOT_FIND.");
326 return CONFIGURE_ERROR_NOT_FIND;
327 }
328 moduleData->PutSharingValues(tag, values);
329 datass_.emplace(std::make_pair(module, moduleData));
330 return CONFIGURE_ERROR_NONE;
331 }
332
333 return iter->second->PutSharingValues(tag, values);
334 }
335
GetSharingValue(const std::string & key,const std::string & module,const std::string & tag)336 SharingValue::Ptr SharingData::GetSharingValue(const std::string &key, const std::string &module,
337 const std::string &tag)
338 {
339 SHARING_LOGD("trace.");
340 auto iter = datass_.find(module);
341 if (iter == datass_.end()) {
342 return nullptr;
343 }
344
345 return iter->second->GetSharingValue(tag, key);
346 }
347
GetSharingValues(SharingDataGroupByModule::Ptr & values,const std::string & module)348 int32_t SharingData::GetSharingValues(SharingDataGroupByModule::Ptr &values, const std::string &module)
349 {
350 SHARING_LOGD("trace.");
351 auto iter = datass_.find(module);
352 if (iter == datass_.end()) {
353 return CONFIGURE_ERROR_NOT_FIND;
354 }
355
356 values = iter->second;
357 return CONFIGURE_ERROR_NONE;
358 }
359
GetSharingValues(std::unordered_map<std::string,SharingValue::Ptr> & values,const std::string & module,const std::string & tag)360 int32_t SharingData::GetSharingValues(std::unordered_map<std::string, SharingValue::Ptr> &values,
361 const std::string &module, const std::string &tag)
362 {
363 SHARING_LOGD("trace.");
364 auto iter = datass_.find(module);
365 if (iter == datass_.end()) {
366 return CONFIGURE_ERROR_NOT_FIND;
367 }
368
369 return iter->second->GetSharingValues(tag, values);
370 }
371
GetSharingValues(SharingDataGroupByTag::Ptr & value,const std::string & module,const std::string & tag)372 int32_t SharingData::GetSharingValues(SharingDataGroupByTag::Ptr &value, const std::string &module,
373 const std::string &tag)
374 {
375 SHARING_LOGD("trace.");
376 auto iter = datass_.find(module);
377 if (iter == datass_.end()) {
378 return CONFIGURE_ERROR_NOT_FIND;
379 }
380
381 return iter->second->GetSharingValues(tag, value);
382 }
383
HasKey(const std::string & key,const std::string & module,const std::string & tag)384 bool SharingData::HasKey(const std::string &key, const std::string &module, const std::string &tag)
385 {
386 SHARING_LOGD("trace.");
387 auto iter = datass_.find(module);
388 if (iter == datass_.end()) {
389 return false;
390 }
391
392 return iter->second->HasKey(tag, key);
393 }
394
HasModule(const std::string & module)395 bool SharingData::HasModule(const std::string &module)
396 {
397 SHARING_LOGD("trace.");
398 return datass_.find(module) != datass_.end();
399 }
400
HasTag(const std::string & module,const std::string & tag)401 bool SharingData::HasTag(const std::string &module, const std::string &tag)
402 {
403 SHARING_LOGD("trace.");
404 auto iter = datass_.find(module);
405 if (iter == datass_.end()) {
406 return false;
407 }
408
409 return iter->second->HasTag(tag);
410 }
411
ForEach(Each each)412 void SharingData::ForEach(Each each)
413 {
414 SHARING_LOGD("trace.");
415 auto iter = datass_.begin();
416 while (iter != datass_.end()) {
417 std::string key = iter->first;
418 SHARING_LOGD("forEach %{public}s.", key.c_str());
419 each(key, iter->second);
420 iter++;
421 }
422 }
423
Print()424 void SharingData::Print()
425 {
426 SHARING_LOGD("trace.");
427 auto iter = datass_.begin();
428 while (iter != datass_.end()) {
429 SHARING_LOGD("forEach print %{public}s.", iter->first.c_str());
430 SharingDataGroupByModule::Ptr value = iter->second;
431 if (value) {
432 value->Print();
433 }
434 iter++;
435 }
436 }
437
438 } // namespace Sharing
439 } // namespace OHOS