• 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 
16 #ifndef DATA_SHARE_HELPER_IMPL_H
17 #define DATA_SHARE_HELPER_IMPL_H
18 
19 #include "concurrent_map.h"
20 #include "data_ability_observer_stub.h"
21 #include "datashare_helper.h"
22 #include "ext_special_controller.h"
23 #include "general_controller.h"
24 #include "persistent_data_controller.h"
25 #include "published_data_controller.h"
26 
27 namespace OHOS::DataShare {
28 class ObserverImpl : public AAFwk::DataAbilityObserverStub {
29 public:
ObserverImpl(const std::shared_ptr<DataShareObserver> dataShareObserver)30     explicit ObserverImpl(const std::shared_ptr<DataShareObserver> dataShareObserver)
31         : dataShareObserver_(dataShareObserver){};
32     void OnChange();
33     void OnChangeExt(const AAFwk::ChangeInfo &info);
34     static DataShareObserver::ChangeInfo ConvertInfo(const AAFwk::ChangeInfo &info);
35     static AAFwk::ChangeInfo ConvertInfo(const DataShareObserver::ChangeInfo &info);
36     static sptr<ObserverImpl> GetObserver(const Uri& uri, const std::shared_ptr<DataShareObserver> &observer);
37     static bool FindObserver(const Uri& uri, const std::shared_ptr<DataShareObserver> &observer);
38     static bool DeleteObserver(const Uri& uri, const std::shared_ptr<DataShareObserver> &observer);
39 private:
40     struct ObserverParam {
41         sptr<ObserverImpl> obs_;
42         std::list<Uri> uris_;
43     };
44     std::shared_ptr<DataShareObserver> dataShareObserver_;
45     static ConcurrentMap<DataShareObserver *, ObserverParam> observers_;
46 };
47 
48 class DataShareHelperImpl : public DataShareHelper {
49 public:
50     DataShareHelperImpl(const Uri &uri, const sptr<IRemoteObject> &token,
51         std::shared_ptr<DataShareConnection> connection, bool isSystem = false);
52     DataShareHelperImpl(std::string extUri = "", bool isSystem = false);
53 
54     ~DataShareHelperImpl() override;
55 
56     bool Release() override;
57 
58     std::vector<std::string> GetFileTypes(Uri &uri, const string &mimeTypeFilter) override;
59 
60     int OpenFile(Uri &uri, const string &mode) override;
61 
62     int OpenFileWithErrCode(Uri &uri, const string &mode, int32_t &errCode) override;
63 
64     int OpenRawFile(Uri &uri, const string &mode) override;
65 
66     int Insert(Uri &uri, const DataShareValuesBucket &value) override;
67 
68     int InsertExt(Uri &uri, const DataShareValuesBucket &value, std::string &result) override;
69 
70     int Update(Uri &uri, const DataSharePredicates &predicates, const DataShareValuesBucket &value) override;
71 
72     int BatchUpdate(const UpdateOperations &operations, std::vector<BatchUpdateResult> &results) override;
73 
74     int Delete(Uri &uri, const DataSharePredicates &predicates) override;
75 
76     std::shared_ptr<DataShareResultSet> Query(Uri &uri, const DataSharePredicates &predicates,
77         std::vector<std::string> &columns, DatashareBusinessError *businessError) override;
78 
79     std::shared_ptr<DataShareResultSet> Query(Uri &uri, const DataSharePredicates &predicates,
80         std::vector<std::string> &columns, DataShareOption &option, DatashareBusinessError *businessError) override;
81 
82     string GetType(Uri &uri) override;
83 
84     int BatchInsert(Uri &uri, const std::vector<DataShareValuesBucket> &values) override;
85 
86     int ExecuteBatch(const std::vector<OperationStatement> &statements, ExecResultSet &result) override;
87 
88     int RegisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver) override;
89 
90     int UnregisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver) override;
91 
92     void NotifyChange(const Uri &uri) override;
93 
94     int RegisterObserverExtProvider(const Uri &uri, std::shared_ptr<DataShareObserver> dataObserver,
95         bool isDescendants) override;
96 
97     int UnregisterObserverExtProvider(const Uri &uri, std::shared_ptr<DataShareObserver> dataObserver) override;
98 
99     void NotifyChangeExtProvider(const DataShareObserver::ChangeInfo &changeInfo) override;
100 
101     Uri NormalizeUri(Uri &uri) override;
102 
103     Uri DenormalizeUri(Uri &uri) override;
104 
105     int AddQueryTemplate(const string &uri, int64_t subscriberId, Template &tpl) override;
106 
107     int DelQueryTemplate(const string &uri, int64_t subscriberId) override;
108 
109     std::vector<OperationResult> Publish(const Data &data, const string &bundleName) override;
110 
111     Data GetPublishedData(const string &bundleName, int &resultCode) override;
112 
113     std::vector<OperationResult> SubscribeRdbData(const std::vector<std::string> &uris, const TemplateId &templateId,
114         const std::function<void(const RdbChangeNode &)> &callback) override;
115 
116     std::vector<OperationResult> UnsubscribeRdbData(const std::vector<std::string> &uris,
117         const TemplateId &templateId) override;
118 
119     std::vector<OperationResult> EnableRdbSubs(const std::vector<std::string> &uris,
120         const TemplateId &templateId) override;
121 
122     std::vector<OperationResult> DisableRdbSubs(const std::vector<std::string> &uris,
123         const TemplateId &templateId) override;
124 
125     std::vector<OperationResult> SubscribePublishedData(const std::vector<std::string> &uris, int64_t subscriberId,
126         const std::function<void(const PublishedDataChangeNode &)> &callback) override;
127 
128     std::vector<OperationResult> UnsubscribePublishedData(const std::vector<std::string> &uris,
129         int64_t subscriberId) override;
130 
131     std::vector<OperationResult> EnablePubSubs(const std::vector<std::string> &uris, int64_t subscriberId) override;
132 
133     std::vector<OperationResult> DisablePubSubs(const std::vector<std::string> &uris, int64_t subscriberId) override;
134 
135     std::pair<int32_t, int32_t> InsertEx(Uri &uri, const DataShareValuesBucket &value) override;
136 
137     std::pair<int32_t, int32_t> UpdateEx(
138         Uri &uri, const DataSharePredicates &predicates, const DataShareValuesBucket &value) override;
139 
140     std::pair<int32_t, int32_t> DeleteEx(Uri &uri, const DataSharePredicates &predicates) override;
141 
142     int32_t UserDefineFunc(
143         MessageParcel &data, MessageParcel &reply, MessageOption &option) override;
144 
145 private:
146     std::shared_ptr<ExtSpecialController> extSpCtl_ = nullptr;
147     std::shared_ptr<GeneralController> generalCtl_ = nullptr;
148     std::shared_ptr<PersistentDataController> persistentDataCtl_ = nullptr;
149     std::shared_ptr<PublishedDataController> publishedDataCtl_ = nullptr;
150     bool isSystem_;
151 };
152 } // namespace OHOS::DataShare
153 #endif // DATA_SHARE_HELPER_IMPL_H
154