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 #define LOG_TAG "SystemDefinedAppItemNapi"
16 #include "system_defined_appitem_napi.h"
17 
18 #include "system_defined_appitem.h"
19 #include "system_defined_record_napi.h"
20 #include "unified_record_napi.h"
21 
22 namespace OHOS {
23 namespace UDMF {
Constructor(napi_env env)24 napi_value SystemDefinedAppItemNapi::Constructor(napi_env env)
25 {
26     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
27     napi_property_descriptor properties[] = {
28         /* SystemDefinedAppItem extends UnifiedRecord */
29         DECLARE_NAPI_FUNCTION("getType", UnifiedRecordNapi::GetType),
30         DECLARE_NAPI_FUNCTION("getValue", UnifiedRecordNapi::GetValue),
31         /* SystemDefinedAppItem extends SystemDefinedRecord */
32         DECLARE_NAPI_GETTER_SETTER("details", SystemDefinedRecordNapi::GetDetails, SystemDefinedRecordNapi::SetDetails),
33         /* SystemDefinedAppItem properties */
34         DECLARE_NAPI_GETTER_SETTER("appId", GetAppId, SetAppId),
35         DECLARE_NAPI_GETTER_SETTER("appName", GetAppName, SetAppName),
36         DECLARE_NAPI_GETTER_SETTER("appIconId", GetAppIconId, SetAppIconId),
37         DECLARE_NAPI_GETTER_SETTER("appLabelId", GetAppLabelId, SetAppLabelId),
38         DECLARE_NAPI_GETTER_SETTER("bundleName", GetBundleName, SetBundleName),
39         DECLARE_NAPI_GETTER_SETTER("abilityName", GetAbilityName, SetAbilityName),
40     };
41     size_t count = sizeof(properties) / sizeof(properties[0]);
42     return NapiDataUtils::DefineClass(env, "SDAppItem", properties, count, SystemDefinedAppItemNapi::New);
43 }
44 
New(napi_env env,napi_callback_info info)45 napi_value SystemDefinedAppItemNapi::New(napi_env env, napi_callback_info info)
46 {
47     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
48     auto ctxt = std::make_shared<ContextBase>();
49     ctxt->GetCbInfoSync(env, info);
50     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
51 
52     auto *sdAppItem = new (std::nothrow) SystemDefinedAppItemNapi();
53     ASSERT_ERR(ctxt->env, sdAppItem != nullptr, Status::E_ERROR, "no memory for system defined appitem!");
54     sdAppItem->value_ = std::make_shared<SystemDefinedAppItem>();
55     ASSERT_CALL(env, napi_wrap(env, ctxt->self, sdAppItem, Destructor, nullptr, nullptr), sdAppItem);
56     return ctxt->self;
57 }
58 
NewInstance(napi_env env,std::shared_ptr<UnifiedRecord> in,napi_value & out)59 void SystemDefinedAppItemNapi::NewInstance(napi_env env, std::shared_ptr<UnifiedRecord> in, napi_value &out)
60 {
61     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
62     ASSERT_CALL_VOID(env, napi_new_instance(env, Constructor(env), 0, nullptr, &out));
63     auto *sdAppItem = new (std::nothrow) SystemDefinedAppItemNapi();
64     ASSERT_ERR_VOID(env, sdAppItem != nullptr, Status::E_ERROR, "no memory for system defined appitem!");
65     sdAppItem->value_ = std::static_pointer_cast<SystemDefinedAppItem>(in);
66     ASSERT_CALL_DELETE(env, napi_wrap(env, out, sdAppItem, Destructor, nullptr, nullptr), sdAppItem);
67 }
68 
Destructor(napi_env env,void * data,void * hint)69 void SystemDefinedAppItemNapi::Destructor(napi_env env, void *data, void *hint)
70 {
71     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi finalize.");
72     auto *sdAppItem = static_cast<SystemDefinedAppItemNapi *>(data);
73     ASSERT_VOID(sdAppItem != nullptr, "finalize null!");
74     delete sdAppItem;
75 }
76 
GetSystemDefinedAppItem(napi_env env,napi_callback_info info,std::shared_ptr<ContextBase> ctxt)77 SystemDefinedAppItemNapi *SystemDefinedAppItemNapi::GetSystemDefinedAppItem(
78     napi_env env, napi_callback_info info, std::shared_ptr<ContextBase> ctxt)
79 {
80     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
81     ctxt->GetCbInfoSync(env, info);
82     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
83     return static_cast<SystemDefinedAppItemNapi *>(ctxt->native);
84 }
85 
GetAppId(napi_env env,napi_callback_info info)86 napi_value SystemDefinedAppItemNapi::GetAppId(napi_env env, napi_callback_info info)
87 {
88     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
89     auto ctxt = std::make_shared<ContextBase>();
90     auto sdAppItem = GetSystemDefinedAppItem(env, info, ctxt);
91     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
92         "invalid object!");
93     ctxt->status = NapiDataUtils::SetValue(env, sdAppItem->value_->GetAppId(), ctxt->output);
94     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, "set app id failed!");
95     return ctxt->output;
96 }
97 
SetAppId(napi_env env,napi_callback_info info)98 napi_value SystemDefinedAppItemNapi::SetAppId(napi_env env, napi_callback_info info)
99 {
100     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
101     auto ctxt = std::make_shared<ContextBase>();
102     std::string appId;
103     auto input = [env, ctxt, &appId](size_t argc, napi_value *argv) {
104         ASSERT_BUSINESS_ERR(ctxt, argc >= 1,
105             Status::E_INVALID_PARAMETERS, "Parameter error: Mandatory parameters are left unspecified");
106         ctxt->status = NapiDataUtils::GetValue(env, argv[0], appId);
107         ASSERT_BUSINESS_ERR(ctxt, ctxt->status == napi_ok,
108             Status::E_INVALID_PARAMETERS, "Parameter error: parameter appId type must be string");
109     };
110     ctxt->GetCbInfoSync(env, info, input);
111     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
112     auto sdAppItem = static_cast<SystemDefinedAppItemNapi *>(ctxt->native);
113     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
114         "invalid object!");
115     sdAppItem->value_->SetAppId(appId);
116     return nullptr;
117 }
118 
GetAppName(napi_env env,napi_callback_info info)119 napi_value SystemDefinedAppItemNapi::GetAppName(napi_env env, napi_callback_info info)
120 {
121     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
122     auto ctxt = std::make_shared<ContextBase>();
123     auto sdAppItem = GetSystemDefinedAppItem(env, info, ctxt);
124     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
125         "invalid object!");
126     ctxt->status = NapiDataUtils::SetValue(env, sdAppItem->value_->GetAppName(), ctxt->output);
127     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, "set app name failed!");
128     return ctxt->output;
129 }
130 
SetAppName(napi_env env,napi_callback_info info)131 napi_value SystemDefinedAppItemNapi::SetAppName(napi_env env, napi_callback_info info)
132 {
133     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
134     auto ctxt = std::make_shared<ContextBase>();
135     std::string appName;
136     auto input = [env, ctxt, &appName](size_t argc, napi_value *argv) {
137         ASSERT_BUSINESS_ERR(ctxt, argc >= 1,
138             Status::E_INVALID_PARAMETERS, "Parameter error: Mandatory parameters are left unspecified");
139         ctxt->status = NapiDataUtils::GetValue(env, argv[0], appName);
140         ASSERT_BUSINESS_ERR(ctxt, ctxt->status == napi_ok,
141             Status::E_INVALID_PARAMETERS, "Parameter error: parameter appName type must be string");
142     };
143     ctxt->GetCbInfoSync(env, info, input);
144     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
145     auto sdAppItem = static_cast<SystemDefinedAppItemNapi *>(ctxt->native);
146     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
147         "invalid object!");
148     sdAppItem->value_->SetAppName(appName);
149     return nullptr;
150 }
151 
GetAppIconId(napi_env env,napi_callback_info info)152 napi_value SystemDefinedAppItemNapi::GetAppIconId(napi_env env, napi_callback_info info)
153 {
154     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
155     auto ctxt = std::make_shared<ContextBase>();
156     auto sdAppItem = GetSystemDefinedAppItem(env, info, ctxt);
157     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
158         "invalid object!");
159     ctxt->status = NapiDataUtils::SetValue(env, sdAppItem->value_->GetAppIconId(), ctxt->output);
160     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, "set app icon id failed!");
161     return ctxt->output;
162 }
163 
SetAppIconId(napi_env env,napi_callback_info info)164 napi_value SystemDefinedAppItemNapi::SetAppIconId(napi_env env, napi_callback_info info)
165 {
166     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
167     auto ctxt = std::make_shared<ContextBase>();
168     std::string appIconId;
169     auto input = [env, ctxt, &appIconId](size_t argc, napi_value *argv) {
170         ASSERT_BUSINESS_ERR(ctxt, argc >= 1,
171             Status::E_INVALID_PARAMETERS, "Parameter error: Mandatory parameters are left unspecified");
172         ctxt->status = NapiDataUtils::GetValue(env, argv[0], appIconId);
173         ASSERT_BUSINESS_ERR(ctxt, ctxt->status == napi_ok,
174             Status::E_INVALID_PARAMETERS, "Parameter error: parameter appIconId type must be string");
175     };
176     ctxt->GetCbInfoSync(env, info, input);
177     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
178     auto sdAppItem = static_cast<SystemDefinedAppItemNapi *>(ctxt->native);
179     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
180         "invalid object!");
181     sdAppItem->value_->SetAppIconId(appIconId);
182     return nullptr;
183 }
184 
GetAppLabelId(napi_env env,napi_callback_info info)185 napi_value SystemDefinedAppItemNapi::GetAppLabelId(napi_env env, napi_callback_info info)
186 {
187     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
188     auto ctxt = std::make_shared<ContextBase>();
189     auto sdAppItem = GetSystemDefinedAppItem(env, info, ctxt);
190     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
191         "invalid object!");
192     ctxt->status = NapiDataUtils::SetValue(env, sdAppItem->value_->GetAppLabelId(), ctxt->output);
193     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, "set app label id failed!");
194     return ctxt->output;
195 }
196 
SetAppLabelId(napi_env env,napi_callback_info info)197 napi_value SystemDefinedAppItemNapi::SetAppLabelId(napi_env env, napi_callback_info info)
198 {
199     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
200     auto ctxt = std::make_shared<ContextBase>();
201     std::string appLabelId;
202     auto input = [env, ctxt, &appLabelId](size_t argc, napi_value *argv) {
203         ASSERT_BUSINESS_ERR(ctxt, argc >= 1,
204             Status::E_INVALID_PARAMETERS, "Parameter error: Mandatory parameters are left unspecified");
205         ctxt->status = NapiDataUtils::GetValue(env, argv[0], appLabelId);
206         ASSERT_BUSINESS_ERR(ctxt, ctxt->status == napi_ok,
207             Status::E_INVALID_PARAMETERS, "Parameter error: parameter appLabelId type must be string");
208     };
209     ctxt->GetCbInfoSync(env, info, input);
210     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
211     auto sdAppItem = static_cast<SystemDefinedAppItemNapi *>(ctxt->native);
212     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
213         "invalid object!");
214     sdAppItem->value_->SetAppLabelId(appLabelId);
215     return nullptr;
216 }
217 
GetBundleName(napi_env env,napi_callback_info info)218 napi_value SystemDefinedAppItemNapi::GetBundleName(napi_env env, napi_callback_info info)
219 {
220     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
221     auto ctxt = std::make_shared<ContextBase>();
222     auto sdAppItem = GetSystemDefinedAppItem(env, info, ctxt);
223     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
224         "invalid object!");
225     ctxt->status = NapiDataUtils::SetValue(env, sdAppItem->value_->GetBundleName(), ctxt->output);
226     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, "set bundle name failed!");
227     return ctxt->output;
228 }
229 
SetBundleName(napi_env env,napi_callback_info info)230 napi_value SystemDefinedAppItemNapi::SetBundleName(napi_env env, napi_callback_info info)
231 {
232     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
233     auto ctxt = std::make_shared<ContextBase>();
234     std::string bundleName;
235     auto input = [env, ctxt, &bundleName](size_t argc, napi_value *argv) {
236         ASSERT_BUSINESS_ERR(ctxt, argc >= 1,
237             Status::E_INVALID_PARAMETERS, "Parameter error: Mandatory parameters are left unspecified");
238         ctxt->status = NapiDataUtils::GetValue(env, argv[0], bundleName);
239         ASSERT_BUSINESS_ERR(ctxt, ctxt->status == napi_ok,
240             Status::E_INVALID_PARAMETERS, "Parameter error: parameter bundleName type must be string");
241     };
242     ctxt->GetCbInfoSync(env, info, input);
243     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
244     auto sdAppItem = static_cast<SystemDefinedAppItemNapi *>(ctxt->native);
245     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
246         "invalid object!");
247     sdAppItem->value_->SetBundleName(bundleName);
248     return nullptr;
249 }
250 
GetAbilityName(napi_env env,napi_callback_info info)251 napi_value SystemDefinedAppItemNapi::GetAbilityName(napi_env env, napi_callback_info info)
252 {
253     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
254     auto ctxt = std::make_shared<ContextBase>();
255     auto sdAppItem = GetSystemDefinedAppItem(env, info, ctxt);
256     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
257         "invalid object!");
258     ctxt->status = NapiDataUtils::SetValue(env, sdAppItem->value_->GetAbilityName(), ctxt->output);
259     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, "set ability name failed!");
260     return ctxt->output;
261 }
262 
SetAbilityName(napi_env env,napi_callback_info info)263 napi_value SystemDefinedAppItemNapi::SetAbilityName(napi_env env, napi_callback_info info)
264 {
265     LOG_DEBUG(UDMF_KITS_NAPI, "SystemDefinedAppItemNapi");
266     auto ctxt = std::make_shared<ContextBase>();
267     std::string abilityName;
268     auto input = [env, ctxt, &abilityName](size_t argc, napi_value *argv) {
269         ASSERT_BUSINESS_ERR(ctxt, argc >= 1,
270             Status::E_INVALID_PARAMETERS, "Parameter error: Mandatory parameters are left unspecified");
271         ctxt->status = NapiDataUtils::GetValue(env, argv[0], abilityName);
272         ASSERT_BUSINESS_ERR(ctxt, ctxt->status == napi_ok,
273             Status::E_INVALID_PARAMETERS, "Parameter error: parameter abilityName type must be string");
274     };
275     ctxt->GetCbInfoSync(env, info, input);
276     ASSERT_ERR(ctxt->env, ctxt->status == napi_ok, Status::E_ERROR, ctxt->error);
277     auto sdAppItem = static_cast<SystemDefinedAppItemNapi *>(ctxt->native);
278     ASSERT_ERR(ctxt->env, (sdAppItem != nullptr && sdAppItem->value_ != nullptr), Status::E_ERROR,
279         "invalid object!");
280     sdAppItem->value_->SetAbilityName(abilityName);
281     return nullptr;
282 }
283 } // namespace UDMF
284 } // namespace OHOS