• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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