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 
RegisterDataObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)52 KITS::ErrorCode NfcDataShareImpl::RegisterDataObserver(
53     const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
54 {
55     if (dataShareHelper_ == nullptr) {
56         ErrorLog("RegisterDataObserver: dataShareHelper_ is nullptr, retry init.");
57         Initialize();
58         if (dataShareHelper_ == nullptr) {
59             ErrorLog("RegisterDataObserver: dataShareHelper_ is nullptr, retry failed");
60             return KITS::ERR_NFC_DATABASE_RW;
61         }
62     }
63     dataShareHelper_->RegisterObserver(uri, dataObserver);
64     return KITS::ERR_NONE;
65 }
66 
UnregisterDataObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)67 KITS::ErrorCode NfcDataShareImpl::UnregisterDataObserver(
68     const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
69 {
70     if (dataShareHelper_ == nullptr) {
71         ErrorLog("UnregisterDataObserver: dataShareHelper_ is nullptr, retry init.");
72         Initialize();
73         if (dataShareHelper_ == nullptr) {
74             ErrorLog("UnregisterDataObserver: dataShareHelper_ is nullptr, retry failed");
75             return KITS::ERR_NFC_DATABASE_RW;
76         }
77     }
78     dataShareHelper_->UnregisterObserver(uri, dataObserver);
79     return KITS::ERR_NONE;
80 }
81 
GetValue(Uri & uri,const std::string & column,int32_t & value)82 KITS::ErrorCode NfcDataShareImpl::GetValue(Uri &uri, const std::string &column, int32_t &value)
83 {
84     if (dataShareHelper_ == nullptr) {
85         ErrorLog("GetValue: dataShareHelper_ is nullptr, retry init.");
86         Initialize();
87         if (dataShareHelper_ == nullptr) {
88             ErrorLog("GetValue: dataShareHelper_ is nullptr, retry failed");
89             return KITS::ERR_NFC_DATABASE_RW;
90         }
91     }
92     DataShare::DataSharePredicates predicates;
93     std::vector<std::string> columns;
94     predicates.EqualTo(KITS::NFC_DATA_COLUMN_KEYWORD, column);
95     auto rows = dataShareHelper_->Query(uri, predicates, columns);
96     if (rows == nullptr) {
97         ErrorLog("%{public}s: can't get rows.", __func__);
98         return KITS::ERR_NFC_DATABASE_RW;
99     }
100     rows->GoToFirstRow();
101     int32_t columnIndex;
102     rows->GetColumnIndex(KITS::NFC_DATA_COLUMN_VALUE, columnIndex);
103     std::string valueStr;
104     int32_t ret = rows->GetString(columnIndex, valueStr);
105     if (ret != KITS::ERR_NONE) {
106         ErrorLog("%{public}s: can't get value.", __func__);
107         return KITS::ERR_NFC_DATABASE_RW;
108     }
109     rows->Close();
110     value = atoi(valueStr.c_str());
111     InfoLog("%{public}s: success, value = %{public}d.", __func__, value);
112     return KITS::ERR_NONE;
113 }
114 } // NFC
115 } // OHOS