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 23namespace OHOS { 24namespace NetManagerStandard { 25namespace { 26constexpr const char *SETTINGS_DATASHARE_URI = 27 "datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true"; 28constexpr const char *SETTINGS_DATA_EXT_URI = "datashare:///com.ohos.settingsdata.DataAbility"; 29constexpr const char *SETTINGS_DATA_COLUMN_KEYWORD = "KEYWORD"; 30constexpr const char *SETTINGS_DATA_COLUMN_VALUE = "VALUE"; 31 32constexpr int INVALID_VALUE = -1; 33} // namespace 34 35NetDataShareHelperUtils::NetDataShareHelperUtils() {} 36 37std::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 52int32_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 84int32_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 108int32_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