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