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 #include "net_datashare_utils.h"
17
18 #include <vector>
19
20 #include "net_manager_constants.h"
21 #include "net_mgr_log_wrapper.h"
22
23 namespace OHOS {
24 namespace NetManagerStandard {
25 namespace {
26 constexpr const char *SETTINGS_DATASHARE_URI =
27 "datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true";
28 constexpr const char *SETTINGS_DATA_EXT_URI = "datashare:///com.ohos.settingsdata.DataAbility";
29 constexpr const char *SETTINGS_DATA_COLUMN_KEYWORD = "KEYWORD";
30 constexpr const char *SETTINGS_DATA_COLUMN_VALUE = "VALUE";
31
32 constexpr int INVALID_VALUE = -1;
33 } // namespace
34
NetDataShareHelperUtils()35 NetDataShareHelperUtils::NetDataShareHelperUtils() {}
36
CreateDataShareHelper()37 std::shared_ptr<DataShare::DataShareHelper> NetDataShareHelperUtils::CreateDataShareHelper()
38 {
39 sptr<ISystemAbilityManager> saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
40 if (saManager == nullptr) {
41 NETMGR_LOG_E("NetDataShareHelperUtils GetSystemAbilityManager failed.");
42 return nullptr;
43 }
44 sptr<IRemoteObject> remoteObj = saManager->GetSystemAbility(COMM_NET_CONN_MANAGER_SYS_ABILITY_ID);
45 if (remoteObj == nullptr) {
46 NETMGR_LOG_E("NetDataShareHelperUtils GetSystemAbility Service Failed.");
47 return nullptr;
48 }
49 return DataShare::DataShareHelper::Creator(remoteObj, SETTINGS_DATASHARE_URI, SETTINGS_DATA_EXT_URI);
50 }
51
Query(Uri & uri,const std::string & key,std::string & value)52 int32_t NetDataShareHelperUtils::Query(Uri &uri, const std::string &key, std::string &value)
53 {
54 std::shared_ptr<DataShare::DataShareHelper> dataShareHelper = CreateDataShareHelper();
55 if (dataShareHelper == nullptr) {
56 NETMGR_LOG_E("dataShareHelper is nullptr");
57 return NETMANAGER_ERROR;
58 }
59 DataShare::DataSharePredicates predicates;
60 std::vector<std::string> columns;
61 predicates.EqualTo(SETTINGS_DATA_COLUMN_KEYWORD, key);
62 auto result = dataShareHelper->Query(uri, predicates, columns);
63 if (result == nullptr) {
64 NETMGR_LOG_E("DataShareHelper query error, result is null");
65 dataShareHelper->Release();
66 return NETMANAGER_ERROR;
67 }
68
69 if (result->GoToFirstRow() != DataShare::E_OK) {
70 result->Close();
71 dataShareHelper->Release();
72 return NETMANAGER_ERROR;
73 }
74
75 int columnIndex;
76 result->GetColumnIndex(SETTINGS_DATA_COLUMN_VALUE, columnIndex);
77 result->GetString(columnIndex, value);
78 result->Close();
79 dataShareHelper->Release();
80 NETMGR_LOG_I("DataShareHelper query success,value[%{public}s]", value.c_str());
81 return NETMANAGER_SUCCESS;
82 }
83
Insert(Uri & uri,const std::string & key,const std::string & value)84 int32_t NetDataShareHelperUtils::Insert(Uri &uri, const std::string &key, const std::string &value)
85 {
86 std::shared_ptr<DataShare::DataShareHelper> dataShareHelper = CreateDataShareHelper();
87 if (dataShareHelper == nullptr) {
88 NETMGR_LOG_E("dataShareHelper is nullptr");
89 return NETMANAGER_ERROR;
90 }
91 DataShare::DataShareValuesBucket valuesBucket;
92 DataShare::DataShareValueObject keyObj(key);
93 DataShare::DataShareValueObject valueObj(value);
94 valuesBucket.Put(SETTINGS_DATA_COLUMN_KEYWORD, keyObj);
95 valuesBucket.Put(SETTINGS_DATA_COLUMN_VALUE, valueObj);
96 int32_t result = dataShareHelper->Insert(uri, valuesBucket);
97 if (result == INVALID_VALUE) {
98 NETMGR_LOG_E("DataShareHelper insert failed, insert result:%{public}d", result);
99 dataShareHelper->Release();
100 return NETMANAGER_ERROR;
101 }
102 dataShareHelper->NotifyChange(uri);
103 dataShareHelper->Release();
104 NETMGR_LOG_I("DataShareHelper insert success");
105 return NETMANAGER_SUCCESS;
106 }
107
Update(Uri & uri,const std::string & key,const std::string & value)108 int32_t NetDataShareHelperUtils::Update(Uri &uri, const std::string &key, const std::string &value)
109 {
110 std::shared_ptr<DataShare::DataShareHelper> dataShareHelper = CreateDataShareHelper();
111 if (dataShareHelper == nullptr) {
112 NETMGR_LOG_E("dataShareHelper is nullptr");
113 return NETMANAGER_ERROR;
114 }
115 std::string queryValue;
116 int32_t ret = Query(uri, key, queryValue);
117 if (ret == NETMANAGER_ERROR) {
118 dataShareHelper->Release();
119 return Insert(uri, key, value);
120 }
121
122 DataShare::DataShareValuesBucket valuesBucket;
123 DataShare::DataShareValueObject valueObj(value);
124 valuesBucket.Put(SETTINGS_DATA_COLUMN_VALUE, valueObj);
125 DataShare::DataSharePredicates predicates;
126 predicates.EqualTo(SETTINGS_DATA_COLUMN_KEYWORD, key);
127 int32_t result = dataShareHelper->Update(uri, predicates, valuesBucket);
128 if (result == INVALID_VALUE) {
129 dataShareHelper->Release();
130 return NETMANAGER_ERROR;
131 }
132 dataShareHelper->NotifyChange(uri);
133 dataShareHelper->Release();
134 NETMGR_LOG_I("DataShareHelper update success");
135 return NETMANAGER_SUCCESS;
136 }
137 } // namespace NetManagerStandard
138 } // namespace OHOS
139