1 /*
2 * Copyright (c) 2023 Huawei Device 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 #define LOG_TAG "DataShareHelperImpl"
16
17 #include "datashare_helper_impl.h"
18
19 #include "adaptor.h"
20 #include "concurrent_map.h"
21 #include "data_ability_observer_interface.h"
22 #include "dataobs_mgr_client.h"
23 #include "datashare_log.h"
24 #include "datashare_radar_reporter.h"
25 #include "datashare_result_set.h"
26
27 #include "general_controller_provider_impl.h"
28 #include "general_controller_service_impl.h"
29
30 namespace OHOS {
31 namespace DataShare {
32 using namespace AppExecFwk;
33 // non-silent access
DataShareHelperImpl(const Uri & uri,const sptr<IRemoteObject> & token,std::shared_ptr<DataShareConnection> connection,bool isSystem)34 DataShareHelperImpl::DataShareHelperImpl(const Uri &uri, const sptr<IRemoteObject> &token,
35 std::shared_ptr<DataShareConnection> connection, bool isSystem)
36 {
37 LOG_DEBUG("starts");
38 isSystem_ = isSystem;
39 generalCtl_ = std::make_shared<GeneralControllerProviderImpl>(connection, uri, token);
40 extSpCtl_ = std::make_shared<ExtSpecialController>(connection, uri, token);
41 }
42
43 // silent access
DataShareHelperImpl(std::string extUri,bool isSystem)44 DataShareHelperImpl::DataShareHelperImpl(std::string extUri, bool isSystem)
45 {
46 LOG_DEBUG("starts");
47 isSystem_ = isSystem;
48 generalCtl_ = std::make_shared<GeneralControllerServiceImpl>(extUri);
49 persistentDataCtl_ = std::make_shared<PersistentDataController>();
50 publishedDataCtl_ = std::make_shared<PublishedDataController>();
51 }
52
~DataShareHelperImpl()53 DataShareHelperImpl::~DataShareHelperImpl()
54 {
55 if (persistentDataCtl_ != nullptr && publishedDataCtl_ != nullptr) {
56 persistentDataCtl_->UnSubscribeRdbData(this, {}, {});
57 publishedDataCtl_->UnSubscribePublishedData(this, {}, {});
58 }
59 }
60
Release()61 bool DataShareHelperImpl::Release()
62 {
63 extSpCtl_ = nullptr;
64 generalCtl_ = nullptr;
65 return true;
66 }
67
GetFileTypes(Uri & uri,const std::string & mimeTypeFilter)68 std::vector<std::string> DataShareHelperImpl::GetFileTypes(Uri &uri, const std::string &mimeTypeFilter)
69 {
70 auto extSpCtl = extSpCtl_;
71 if (extSpCtl == nullptr) {
72 LOG_ERROR("extSpCtl is nullptr");
73 return std::vector<std::string>();
74 }
75 return extSpCtl->GetFileTypes(uri, mimeTypeFilter);
76 }
77
OpenFile(Uri & uri,const std::string & mode)78 int DataShareHelperImpl::OpenFile(Uri &uri, const std::string &mode)
79 {
80 auto extSpCtl = extSpCtl_;
81 if (extSpCtl == nullptr) {
82 LOG_ERROR("extSpCtl is nullptr");
83 return DATA_SHARE_ERROR;
84 }
85 return extSpCtl->OpenFile(uri, mode);
86 }
87
OpenRawFile(Uri & uri,const std::string & mode)88 int DataShareHelperImpl::OpenRawFile(Uri &uri, const std::string &mode)
89 {
90 auto extSpCtl = extSpCtl_;
91 if (extSpCtl == nullptr) {
92 LOG_ERROR("extSpCtl is nullptr");
93 return DATA_SHARE_ERROR;
94 }
95 return extSpCtl->OpenRawFile(uri, mode);
96 }
97
Insert(Uri & uri,const DataShareValuesBucket & value)98 int DataShareHelperImpl::Insert(Uri &uri, const DataShareValuesBucket &value)
99 {
100 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
101 auto generalCtl = generalCtl_;
102 if (generalCtl == nullptr) {
103 LOG_ERROR("generalCtl_ is nullptr");
104 return DATA_SHARE_ERROR;
105 }
106 DataShareServiceProxy::SetSystem(isSystem_);
107 auto res = generalCtl->Insert(uri, value);
108 DataShareServiceProxy::CleanSystem();
109 return res;
110 }
111
InsertExt(Uri & uri,const DataShareValuesBucket & value,std::string & result)112 int DataShareHelperImpl::InsertExt(Uri &uri, const DataShareValuesBucket &value, std::string &result)
113 {
114 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
115 auto extSpCtl = extSpCtl_;
116 if (extSpCtl == nullptr) {
117 LOG_ERROR("providerSpCtl is nullptr");
118 return DATA_SHARE_ERROR;
119 }
120 return extSpCtl->InsertExt(uri, value, result);
121 }
122
Update(Uri & uri,const DataSharePredicates & predicates,const DataShareValuesBucket & value)123 int DataShareHelperImpl::Update(Uri &uri, const DataSharePredicates &predicates, const DataShareValuesBucket &value)
124 {
125 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
126 auto generalCtl = generalCtl_;
127 if (generalCtl == nullptr) {
128 LOG_ERROR("generalCtl is nullptr");
129 return DATA_SHARE_ERROR;
130 }
131 DataShareServiceProxy::SetSystem(isSystem_);
132 auto res = generalCtl->Update(uri, predicates, value);
133 DataShareServiceProxy::CleanSystem();
134 return res;
135 }
136
BatchUpdate(const UpdateOperations & operations,std::vector<BatchUpdateResult> & results)137 int DataShareHelperImpl::BatchUpdate(const UpdateOperations &operations, std::vector<BatchUpdateResult> &results)
138 {
139 auto extSpCtl = extSpCtl_;
140 if (extSpCtl == nullptr) {
141 LOG_ERROR("extSpCtl is nullptr");
142 return DATA_SHARE_ERROR;
143 }
144 return extSpCtl->BatchUpdate(operations, results);
145 }
146
Delete(Uri & uri,const DataSharePredicates & predicates)147 int DataShareHelperImpl::Delete(Uri &uri, const DataSharePredicates &predicates)
148 {
149 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
150 auto generalCtl = generalCtl_;
151 if (generalCtl == nullptr) {
152 LOG_ERROR("generalCtl is nullptr");
153 return DATA_SHARE_ERROR;
154 }
155 DataShareServiceProxy::SetSystem(isSystem_);
156 auto res = generalCtl->Delete(uri, predicates);
157 DataShareServiceProxy::CleanSystem();
158 return res;
159 }
160
InsertEx(Uri & uri,const DataShareValuesBucket & value)161 std::pair<int32_t, int32_t> DataShareHelperImpl::InsertEx(Uri &uri, const DataShareValuesBucket &value)
162 {
163 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
164 auto generalCtl = generalCtl_;
165 if (generalCtl == nullptr) {
166 LOG_ERROR("generalCtl_ is nullptr");
167 return std::make_pair(DATA_SHARE_ERROR, 0);
168 }
169 DataShareServiceProxy::SetSystem(isSystem_);
170 auto [errCode, status] = generalCtl->InsertEx(uri, value);
171 DataShareServiceProxy::CleanSystem();
172 if (errCode != E_OK) {
173 LOG_ERROR("generalCtl insert failed, errCode = %{public}d", errCode);
174 }
175 return std::make_pair(errCode, status);
176 }
177
UpdateEx(Uri & uri,const DataSharePredicates & predicates,const DataShareValuesBucket & value)178 std::pair<int32_t, int32_t> DataShareHelperImpl::UpdateEx(
179 Uri &uri, const DataSharePredicates &predicates, const DataShareValuesBucket &value)
180 {
181 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
182 auto generalCtl = generalCtl_;
183 if (generalCtl == nullptr) {
184 LOG_ERROR("generalCtl is nullptr");
185 return std::make_pair(DATA_SHARE_ERROR, 0);
186 }
187 DataShareServiceProxy::SetSystem(isSystem_);
188 auto [errCode, status] = generalCtl->UpdateEx(uri, predicates, value);
189 DataShareServiceProxy::CleanSystem();
190 if (errCode != E_OK) {
191 LOG_ERROR("generalCtl update failed, errCode = %{public}d", errCode);
192 }
193 return std::make_pair(errCode, status);
194 }
195
DeleteEx(Uri & uri,const DataSharePredicates & predicates)196 std::pair<int32_t, int32_t> DataShareHelperImpl::DeleteEx(Uri &uri, const DataSharePredicates &predicates)
197 {
198 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
199 auto generalCtl = generalCtl_;
200 if (generalCtl == nullptr) {
201 LOG_ERROR("generalCtl is nullptr");
202 return std::make_pair(DATA_SHARE_ERROR, 0);
203 }
204 DataShareServiceProxy::SetSystem(isSystem_);
205 auto [errCode, status] = generalCtl->DeleteEx(uri, predicates);
206 DataShareServiceProxy::CleanSystem();
207 if (errCode != E_OK) {
208 LOG_ERROR("generalCtl delete failed, errCode = %{public}d", errCode);
209 }
210 return std::make_pair(errCode, status);
211 }
212
Query(Uri & uri,const DataSharePredicates & predicates,std::vector<std::string> & columns,DatashareBusinessError * businessError)213 std::shared_ptr<DataShareResultSet> DataShareHelperImpl::Query(Uri &uri, const DataSharePredicates &predicates,
214 std::vector<std::string> &columns, DatashareBusinessError *businessError)
215 {
216 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
217 auto generalCtl = generalCtl_;
218 if (generalCtl == nullptr) {
219 LOG_ERROR("generalCtl is nullptr");
220 return nullptr;
221 }
222 DatashareBusinessError error;
223 DataShareServiceProxy::SetSystem(isSystem_);
224 auto resultSet = generalCtl->Query(uri, predicates, columns, error);
225 DataShareServiceProxy::CleanSystem();
226 if (businessError != nullptr) {
227 *businessError = error;
228 }
229 return resultSet;
230 }
231
GetType(Uri & uri)232 std::string DataShareHelperImpl::GetType(Uri &uri)
233 {
234 auto extSpCtl = extSpCtl_;
235 if (extSpCtl == nullptr) {
236 LOG_ERROR("extSpCtl is nullptr");
237 return "";
238 }
239 return extSpCtl->GetType(uri);
240 }
241
BatchInsert(Uri & uri,const std::vector<DataShareValuesBucket> & values)242 int DataShareHelperImpl::BatchInsert(Uri &uri, const std::vector<DataShareValuesBucket> &values)
243 {
244 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
245 auto extSpCtl = extSpCtl_;
246 if (extSpCtl == nullptr) {
247 LOG_ERROR("providerSepOperator is nullptr");
248 return DATA_SHARE_ERROR;
249 }
250 return extSpCtl->BatchInsert(uri, values);
251 }
252
ExecuteBatch(const std::vector<OperationStatement> & statements,ExecResultSet & result)253 int DataShareHelperImpl::ExecuteBatch(const std::vector<OperationStatement> &statements, ExecResultSet &result)
254 {
255 auto extSpCtl = extSpCtl_;
256 if (extSpCtl == nullptr) {
257 LOG_ERROR("extSpCtl is nullptr");
258 return DATA_SHARE_ERROR;
259 }
260 return extSpCtl->ExecuteBatch(statements, result);
261 }
262
RegisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)263 int DataShareHelperImpl::RegisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
264 {
265 RadarReporter::RadarReport report(RadarReporter::OBSERVER_MANAGER,
266 RadarReporter::REGISTER_OBSERVER, __FUNCTION__);
267 if (dataObserver == nullptr) {
268 LOG_ERROR("dataObserver is nullptr");
269 report.SetError(RadarReporter::EMPTY_OBSERVER_ERROR);
270 return E_NULL_OBSERVER;
271 }
272 auto generalCtl = generalCtl_;
273 if (generalCtl == nullptr) {
274 LOG_ERROR("generalCtl is nullptr");
275 report.SetError(RadarReporter::DATA_SHARE_DIED_ERROR);
276 return E_HELPER_DIED;
277 }
278 return generalCtl->RegisterObserver(uri, dataObserver);
279 }
280
UnregisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)281 int DataShareHelperImpl::UnregisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
282 {
283 RadarReporter::RadarReport report(RadarReporter::OBSERVER_MANAGER,
284 RadarReporter::UNREGISTER_OBSERVER, __FUNCTION__);
285 if (dataObserver == nullptr) {
286 LOG_ERROR("dataObserver is nullptr");
287 report.SetError(RadarReporter::EMPTY_OBSERVER_ERROR);
288 return E_NULL_OBSERVER;
289 }
290 auto generalCtl = generalCtl_;
291 if (generalCtl == nullptr) {
292 LOG_ERROR("generalCtl is nullptr");
293 report.SetError(RadarReporter::DATA_SHARE_DIED_ERROR);
294 return E_HELPER_DIED;
295 }
296 return generalCtl->UnregisterObserver(uri, dataObserver);
297 }
298
NotifyChange(const Uri & uri)299 void DataShareHelperImpl::NotifyChange(const Uri &uri)
300 {
301 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
302 auto generalCtl = generalCtl_;
303 if (generalCtl == nullptr) {
304 LOG_ERROR("extSpCtl is nullptr");
305 return;
306 }
307 DataShareServiceProxy::SetSystem(isSystem_);
308 generalCtl->NotifyChange(uri);
309 DataShareServiceProxy::CleanSystem();
310 return;
311 }
312
NormalizeUri(Uri & uri)313 Uri DataShareHelperImpl::NormalizeUri(Uri &uri)
314 {
315 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
316 auto extSpCtl = extSpCtl_;
317 if (extSpCtl == nullptr) {
318 LOG_ERROR("extSpCtl is nullptr");
319 return Uri("");
320 }
321 return extSpCtl->NormalizeUri(uri);
322 }
323
DenormalizeUri(Uri & uri)324 Uri DataShareHelperImpl::DenormalizeUri(Uri &uri)
325 {
326 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
327 auto extSpCtl = extSpCtl_;
328 if (extSpCtl == nullptr) {
329 LOG_ERROR("extSpCtl is nullptr");
330 return Uri("");
331 }
332 return extSpCtl->DenormalizeUri(uri);
333 }
334
AddQueryTemplate(const std::string & uri,int64_t subscriberId,Template & tpl)335 int DataShareHelperImpl::AddQueryTemplate(const std::string &uri, int64_t subscriberId, Template &tpl)
336 {
337 RadarReporter::RadarReport report(RadarReporter::TEMPLATE_DATA_MANAGER,
338 RadarReporter::ADD_TEMPLATE, __FUNCTION__);
339 auto persistentDataCtl = persistentDataCtl_;
340 if (persistentDataCtl == nullptr) {
341 LOG_ERROR("persistentDataCtl is nullptr");
342 report.SetError(RadarReporter::DATA_SHARE_DIED_ERROR);
343 return DATA_SHARE_ERROR;
344 }
345 DataShareServiceProxy::SetSystem(isSystem_);
346 auto res = persistentDataCtl->AddQueryTemplate(uri, subscriberId, tpl);
347 DataShareServiceProxy::CleanSystem();
348 return res;
349 }
350
DelQueryTemplate(const std::string & uri,int64_t subscriberId)351 int DataShareHelperImpl::DelQueryTemplate(const std::string &uri, int64_t subscriberId)
352 {
353 RadarReporter::RadarReport report(RadarReporter::TEMPLATE_DATA_MANAGER,
354 RadarReporter::DELETE_TEMPLATE, __FUNCTION__);
355 auto persistentDataCtl = persistentDataCtl_;
356 if (persistentDataCtl == nullptr) {
357 LOG_ERROR("persistentDataCtl is nullptr");
358 report.SetError(RadarReporter::DATA_SHARE_DIED_ERROR);
359 return DATA_SHARE_ERROR;
360 }
361 DataShareServiceProxy::SetSystem(isSystem_);
362 auto res = persistentDataCtl->DelQueryTemplate(uri, subscriberId);
363 DataShareServiceProxy::CleanSystem();
364 return res;
365 }
366
Publish(const Data & data,const std::string & bundleName)367 std::vector<OperationResult> DataShareHelperImpl::Publish(const Data &data, const std::string &bundleName)
368 {
369 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
370 auto publishedDataCtl = publishedDataCtl_;
371 if (publishedDataCtl == nullptr) {
372 LOG_ERROR("publishedDataCtl is nullptr");
373 return std::vector<OperationResult>();
374 }
375 DataShareServiceProxy::SetSystem(isSystem_);
376 auto res = publishedDataCtl->Publish(data, bundleName);
377 DataShareServiceProxy::CleanSystem();
378 return res;
379 }
380
GetPublishedData(const std::string & bundleName,int & resultCode)381 Data DataShareHelperImpl::GetPublishedData(const std::string &bundleName, int &resultCode)
382 {
383 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
384 auto publishedDataCtl = publishedDataCtl_;
385 if (publishedDataCtl == nullptr) {
386 LOG_ERROR("publishedDataCtl is nullptr");
387 return Data();
388 }
389 DataShareServiceProxy::SetSystem(isSystem_);
390 auto res = publishedDataCtl->GetPublishedData(bundleName, resultCode);
391 DataShareServiceProxy::CleanSystem();
392 return res;
393 }
394
SubscribeRdbData(const std::vector<std::string> & uris,const TemplateId & templateId,const std::function<void (const RdbChangeNode & changeNode)> & callback)395 std::vector<OperationResult> DataShareHelperImpl::SubscribeRdbData(const std::vector<std::string> &uris,
396 const TemplateId &templateId, const std::function<void(const RdbChangeNode &changeNode)> &callback)
397 {
398 LOG_DEBUG("Start SubscribeRdbData");
399 RadarReporter::RadarReport report(RadarReporter::TEMPLATE_DATA_MANAGER,
400 RadarReporter::SUBSCRIBE_RDB_DATA, __FUNCTION__);
401 auto persistentDataCtl = persistentDataCtl_;
402 if (persistentDataCtl == nullptr) {
403 LOG_ERROR("persistentDataCtl is nullptr");
404 report.SetError(RadarReporter::DATA_SHARE_DIED_ERROR);
405 return std::vector<OperationResult>();
406 }
407 DataShareServiceProxy::SetSystem(isSystem_);
408 auto res = persistentDataCtl->SubscribeRdbData(this, uris, templateId, callback);
409 DataShareServiceProxy::CleanSystem();
410 return res;
411 }
412
UnsubscribeRdbData(const std::vector<std::string> & uris,const TemplateId & templateId)413 __attribute__((no_sanitize("cfi"))) std::vector<OperationResult> DataShareHelperImpl::UnsubscribeRdbData(
414 const std::vector<std::string> &uris, const TemplateId &templateId)
415 {
416 LOG_DEBUG("Start UnsubscribeRdbData");
417 RadarReporter::RadarReport report(RadarReporter::TEMPLATE_DATA_MANAGER,
418 RadarReporter::UNSUBSCRIBE_RDB_DATA, __FUNCTION__);
419 auto persistentDataCtl = persistentDataCtl_;
420 if (persistentDataCtl == nullptr) {
421 LOG_ERROR("persistentDataCtl is nullptr");
422 report.SetError(RadarReporter::DATA_SHARE_DIED_ERROR);
423 return std::vector<OperationResult>();
424 }
425 DataShareServiceProxy::SetSystem(isSystem_);
426 auto res = persistentDataCtl->UnSubscribeRdbData(this, uris, templateId);
427 DataShareServiceProxy::CleanSystem();
428 return res;
429 }
430
EnableRdbSubs(const std::vector<std::string> & uris,const TemplateId & templateId)431 std::vector<OperationResult> DataShareHelperImpl::EnableRdbSubs(const std::vector<std::string> &uris,
432 const TemplateId &templateId)
433 {
434 LOG_DEBUG("Start EnableSubscribeRdbData");
435 auto persistentDataCtl = persistentDataCtl_;
436 if (persistentDataCtl == nullptr) {
437 LOG_ERROR("persistentDataCtl is nullptr");
438 return std::vector<OperationResult>();
439 }
440 DataShareServiceProxy::SetSystem(isSystem_);
441 auto res = persistentDataCtl->EnableSubscribeRdbData(this, uris, templateId);
442 DataShareServiceProxy::CleanSystem();
443 return res;
444 }
445
DisableRdbSubs(const std::vector<std::string> & uris,const TemplateId & templateId)446 std::vector<OperationResult> DataShareHelperImpl::DisableRdbSubs(const std::vector<std::string> &uris,
447 const TemplateId &templateId)
448 {
449 LOG_DEBUG("Start DisableSubscribeRdbData");
450 auto persistentDataCtl = persistentDataCtl_;
451 if (persistentDataCtl == nullptr) {
452 LOG_ERROR("persistentDataCtl is nullptr");
453 return std::vector<OperationResult>();
454 }
455 DataShareServiceProxy::SetSystem(isSystem_);
456 auto res = persistentDataCtl->DisableSubscribeRdbData(this, uris, templateId);
457 DataShareServiceProxy::CleanSystem();
458 return res;
459 }
460
SubscribePublishedData(const std::vector<std::string> & uris,int64_t subscriberId,const std::function<void (const PublishedDataChangeNode & changeNode)> & callback)461 std::vector<OperationResult> DataShareHelperImpl::SubscribePublishedData(const std::vector<std::string> &uris,
462 int64_t subscriberId, const std::function<void(const PublishedDataChangeNode &changeNode)> &callback)
463 {
464 LOG_DEBUG("Start SubscribePublishedData");
465 RadarReporter::RadarReport report(RadarReporter::TEMPLATE_DATA_MANAGER,
466 RadarReporter::SUBSCRIBE_PUBLISHED_DATA, __FUNCTION__);
467 auto publishedDataCtl = publishedDataCtl_;
468 if (publishedDataCtl == nullptr) {
469 LOG_ERROR("publishedDataCtl is nullptr");
470 report.SetError(RadarReporter::DATA_SHARE_DIED_ERROR);
471 return std::vector<OperationResult>();
472 }
473 DataShareServiceProxy::SetSystem(isSystem_);
474 auto res = publishedDataCtl->SubscribePublishedData(this, uris, subscriberId, callback);
475 DataShareServiceProxy::CleanSystem();
476 return res;
477 }
478
UnsubscribePublishedData(const std::vector<std::string> & uris,int64_t subscriberId)479 std::vector<OperationResult> DataShareHelperImpl::UnsubscribePublishedData(const std::vector<std::string> &uris,
480 int64_t subscriberId)
481 {
482 LOG_DEBUG("Start UnSubscribePublishedData");
483 RadarReporter::RadarReport report(RadarReporter::TEMPLATE_DATA_MANAGER,
484 RadarReporter::UNSUBSCRIBE_PUBLISHED_DATA, __FUNCTION__);
485 auto publishedDataCtl = publishedDataCtl_;
486 if (publishedDataCtl == nullptr) {
487 LOG_ERROR("publishedDataCtl is nullptr");
488 report.SetError(RadarReporter::DATA_SHARE_DIED_ERROR);
489 return std::vector<OperationResult>();
490 }
491 DataShareServiceProxy::SetSystem(isSystem_);
492 auto res = publishedDataCtl->UnSubscribePublishedData(this, uris, subscriberId);
493 DataShareServiceProxy::CleanSystem();
494 return res;
495 }
496
EnablePubSubs(const std::vector<std::string> & uris,int64_t subscriberId)497 std::vector<OperationResult> DataShareHelperImpl::EnablePubSubs(const std::vector<std::string> &uris,
498 int64_t subscriberId)
499 {
500 LOG_DEBUG("Start enablePubSubs");
501 auto publishedDataCtl = publishedDataCtl_;
502 if (publishedDataCtl == nullptr) {
503 LOG_ERROR("publishedDataCtl is nullptr");
504 return std::vector<OperationResult>();
505 }
506 DataShareServiceProxy::SetSystem(isSystem_);
507 auto res = publishedDataCtl->EnableSubscribePublishedData(this, uris, subscriberId);
508 DataShareServiceProxy::CleanSystem();
509 return res;
510 }
511
DisablePubSubs(const std::vector<std::string> & uris,int64_t subscriberId)512 std::vector<OperationResult> DataShareHelperImpl::DisablePubSubs(const std::vector<std::string> &uris,
513 int64_t subscriberId)
514 {
515 LOG_DEBUG("Start disablePubSubs");
516 auto publishedDataCtl = publishedDataCtl_;
517 if (publishedDataCtl == nullptr) {
518 LOG_ERROR("publishedDataCtl is nullptr");
519 return std::vector<OperationResult>();
520 }
521 DataShareServiceProxy::SetSystem(isSystem_);
522 auto res = publishedDataCtl->DisableSubscribePublishedData(this, uris, subscriberId);
523 DataShareServiceProxy::CleanSystem();
524 return res;
525 }
526
UserDefineFunc(MessageParcel & data,MessageParcel & reply,MessageOption & option)527 int32_t DataShareHelperImpl::UserDefineFunc(
528 MessageParcel &data, MessageParcel &reply, MessageOption &option)
529 {
530 DISTRIBUTED_DATA_HITRACE(std::string(LOG_TAG) + "::" + std::string(__FUNCTION__));
531 auto extSpCtl = extSpCtl_;
532 if (extSpCtl == nullptr) {
533 LOG_ERROR("providerSpCtl is nullptr");
534 return DATA_SHARE_ERROR;
535 }
536 return extSpCtl->UserDefineFunc(data, reply, option);
537 }
538 } // namespace DataShare
539 } // namespace OHOS