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 "nfc_data_share_impl.h"
16 #include "loghelper.h"
17 #include "iremote_broker.h"
18 #include "iremote_stub.h"
19
20 namespace OHOS {
21 namespace NFC {
NfcDataShareImpl()22 NfcDataShareImpl::NfcDataShareImpl()
23 {
24 Initialize();
25 }
26
~NfcDataShareImpl()27 NfcDataShareImpl::~NfcDataShareImpl()
28 {
29 remoteObj_ = nullptr;
30 }
31
Initialize()32 void NfcDataShareImpl::Initialize()
33 {
34 auto remote = sptr<INfcState>(new (std::nothrow) IRemoteStub<INfcState>());
35 if (remote == nullptr) {
36 ErrorLog("%{public}s: remoteObject is nullptr.", __func__);
37 return;
38 }
39 remoteObj_ = remote->AsObject();
40 dataShareHelper_ = CreateDataShareHelper();
41 }
42
CreateDataShareHelper()43 std::shared_ptr<DataShare::DataShareHelper> NfcDataShareImpl::CreateDataShareHelper()
44 {
45 if (remoteObj_ == nullptr) {
46 ErrorLog("%{public}s: remoteObject is nullptr, reInitialize.", __func__);
47 Initialize();
48 }
49 return DataShare::DataShareHelper::Creator(remoteObj_, KITS::NFC_DATA_URI);
50 }
51
GetValue(Uri & uri,const std::string & column,int32_t & value)52 KITS::ErrorCode NfcDataShareImpl::GetValue(Uri &uri, const std::string &column, int32_t &value)
53 {
54 if (dataShareHelper_ == nullptr) {
55 ErrorLog("%{public}s: dataShareHelper_ is nullptr, retry init.", __func__);
56 Initialize();
57 if (dataShareHelper_ == nullptr) {
58 ErrorLog("%{public}s: dataShareHelper_ is nullptr, retry init failed.", __func__);
59 return KITS::ERR_NFC_DATABASE_RW;
60 }
61 }
62 DataShare::DataSharePredicates predicates;
63 std::vector<std::string> columns;
64 predicates.EqualTo(KITS::NFC_DATA_COLUMN_KEYWORD, column);
65 auto rows = dataShareHelper_->Query(uri, predicates, columns);
66 if (rows == nullptr) {
67 ErrorLog("%{public}s: can't get rows.", __func__);
68 return KITS::ERR_NFC_DATABASE_RW;
69 }
70 rows->GoToFirstRow();
71 int32_t columnIndex;
72 rows->GetColumnIndex(KITS::NFC_DATA_COLUMN_VALUE, columnIndex);
73 std::string valueStr;
74 int32_t result = rows->GetString(columnIndex, valueStr);
75 if (result != KITS::ERR_NONE) {
76 ErrorLog("%{public}s: can't get value.", __func__);
77 return KITS::ERR_NFC_DATABASE_RW;
78 }
79 rows->Close();
80 value = atoi(valueStr.c_str());
81 InfoLog("GetValue success, value = %{public}d.", value);
82 return KITS::ERR_NONE;
83 }
84
SetValue(Uri & uri,const std::string & column,int & value)85 KITS::ErrorCode NfcDataShareImpl::SetValue(Uri &uri, const std::string &column, int &value)
86 {
87 if (dataShareHelper_ == nullptr) {
88 ErrorLog("%{public}s: dataShareHelper_ is nullptr, retry init.", __func__);
89 Initialize();
90 if (dataShareHelper_ == nullptr) {
91 ErrorLog("%{public}s: dataShareHelper_ is nullptr, retry init failed.", __func__);
92 return KITS::ERR_NFC_DATABASE_RW;
93 }
94 }
95 int oldVal = 0;
96 int errorCode = GetValue(uri, column, oldVal);
97 DataShare::DataShareValueObject keyObj(column);
98 DataShare::DataShareValueObject valueObj(std::to_string(value));
99 DataShare::DataShareValuesBucket bucket;
100 bucket.Put(KITS::NFC_DATA_COLUMN_VALUE, valueObj);
101 bucket.Put(KITS::NFC_DATA_COLUMN_KEYWORD, keyObj);
102 int32_t result;
103 if (errorCode != KITS::ERR_NONE) {
104 result = dataShareHelper_->Insert(uri, bucket);
105 } else {
106 DataShare::DataSharePredicates predicates;
107 predicates.EqualTo(KITS::NFC_DATA_COLUMN_KEYWORD, column);
108 result = dataShareHelper_->Update(uri, predicates, bucket);
109 }
110 // INVALID_VALUE is -1 DataShare's errorCode
111 if (result == KITS::DATA_SHARE_INVALID_VALUE) {
112 ErrorLog("%{public}s: can't set value.", __func__);
113 return KITS::ERR_NFC_DATABASE_RW;
114 }
115 return KITS::ERR_NONE;
116 }
117 } // NFC
118 } // OHOS