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 #include "persistent_data_controller.h"
16 
17 #include "datashare_log.h"
18 #include "rdb_subscriber_manager.h"
19 
20 namespace OHOS {
21 namespace DataShare {
22 constexpr int INVALID_VALUE = -1;
AddQueryTemplate(const std::string & uri,int64_t subscriberId,Template & tpl)23 int PersistentDataController::AddQueryTemplate(const std::string &uri, int64_t subscriberId, Template &tpl)
24 {
25     auto proxy = DataShareManagerImpl::GetServiceProxy();
26     if (proxy == nullptr) {
27         LOG_ERROR("proxy is nullptr");
28         return INVALID_VALUE;
29     }
30     return proxy->AddQueryTemplate(uri, subscriberId, tpl);
31 }
32 
DelQueryTemplate(const std::string & uri,int64_t subscriberId)33 int PersistentDataController::DelQueryTemplate(const std::string &uri, int64_t subscriberId)
34 {
35     auto proxy = DataShareManagerImpl::GetServiceProxy();
36     if (proxy == nullptr) {
37         LOG_ERROR("proxy is nullptr");
38         return INVALID_VALUE;
39     }
40     return proxy->DelQueryTemplate(uri, subscriberId);
41 }
42 
SubscribeRdbData(void * subscriber,const std::vector<std::string> & uris,const TemplateId & templateId,std::function<void (const RdbChangeNode &)> callback)43 std::vector<OperationResult> PersistentDataController::SubscribeRdbData(void *subscriber,
44     const std::vector<std::string> &uris, const TemplateId &templateId,
45     std::function<void(const RdbChangeNode &)> callback)
46 {
47     auto proxy = DataShareManagerImpl::GetServiceProxy();
48     if (proxy == nullptr) {
49         LOG_ERROR("proxy is nullptr");
50         return std::vector<OperationResult>();
51     }
52     return RdbSubscriberManager::GetInstance().AddObservers(subscriber, proxy, uris, templateId, callback);
53 }
54 
UnSubscribeRdbData(void * subscriber,const std::vector<std::string> & uris,const TemplateId & templateId)55 std::vector<OperationResult> PersistentDataController::UnSubscribeRdbData(void *subscriber,
56     const std::vector<std::string> &uris, const TemplateId &templateId)
57 {
58     auto proxy = DataShareManagerImpl::GetServiceProxy();
59     if (proxy == nullptr) {
60         LOG_ERROR("proxy is nullptr");
61         return std::vector<OperationResult>();
62     }
63 
64     if (uris.empty()) {
65         return RdbSubscriberManager::GetInstance().DelObservers(subscriber, proxy);
66     }
67     return RdbSubscriberManager::GetInstance().DelObservers(subscriber, proxy, uris, templateId);
68 }
69 
EnableSubscribeRdbData(void * subscriber,const std::vector<std::string> & uris,const TemplateId & templateId)70 std::vector<OperationResult> PersistentDataController::EnableSubscribeRdbData(void *subscriber,
71     const std::vector<std::string> &uris, const TemplateId &templateId)
72 {
73     auto proxy = DataShareManagerImpl::GetServiceProxy();
74     if (proxy == nullptr) {
75         LOG_ERROR("proxy is nullptr");
76         return std::vector<OperationResult>();
77     }
78     return RdbSubscriberManager::GetInstance().EnableObservers(subscriber, proxy, uris, templateId);
79 }
80 
DisableSubscribeRdbData(void * subscriber,const std::vector<std::string> & uris,const TemplateId & templateId)81 std::vector<OperationResult> PersistentDataController::DisableSubscribeRdbData(void *subscriber,
82     const std::vector<std::string> &uris, const TemplateId &templateId)
83 {
84     auto proxy = DataShareManagerImpl::GetServiceProxy();
85     if (proxy == nullptr) {
86         LOG_ERROR("proxy is nullptr");
87         return std::vector<OperationResult>();
88     }
89     return RdbSubscriberManager::GetInstance().DisableObservers(subscriber, proxy, uris, templateId);
90 }
91 } // namespace DataShare
92 } // namespace OHOS
93