1 /*
2 * Copyright (c) 2021 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 "js_hap_module_info_utils.h"
17
18 #include "js_data_struct_converter.h"
19 #include "js_runtime_utils.h"
20
21 namespace OHOS {
22 namespace AbilityRuntime {
CreateJsHapModuleInfo(NativeEngine & engine,AppExecFwk::HapModuleInfo & hapModuleInfo)23 NativeValue* CreateJsHapModuleInfo(NativeEngine& engine, AppExecFwk::HapModuleInfo& hapModuleInfo)
24 {
25 NativeValue* objValue = engine.CreateObject();
26 NativeObject* object = ConvertNativeValueTo<NativeObject>(objValue);
27 if (object == nullptr) {
28 return objValue;
29 }
30
31 object->SetProperty("name", CreateJsValue(engine, hapModuleInfo.name));
32 object->SetProperty("moduleName", CreateJsValue(engine, hapModuleInfo.moduleName));
33 object->SetProperty("description", CreateJsValue(engine, hapModuleInfo.description));
34 object->SetProperty("descriptionId", CreateJsValue(engine, hapModuleInfo.descriptionId));
35 object->SetProperty("icon", CreateJsValue(engine, hapModuleInfo.iconPath));
36 object->SetProperty("iconId", CreateJsValue(engine, hapModuleInfo.iconId));
37 object->SetProperty("label", CreateJsValue(engine, hapModuleInfo.label));
38 object->SetProperty("labelId", CreateJsValue(engine, hapModuleInfo.labelId));
39 object->SetProperty("backgroundImg", CreateJsValue(engine, hapModuleInfo.backgroundImg));
40 object->SetProperty("mainAbilityName", CreateJsValue(engine, hapModuleInfo.mainAbility));
41 object->SetProperty("supportedModes", CreateJsValue(engine, hapModuleInfo.supportedModes));
42 object->SetProperty("installationFree", CreateJsValue(engine, hapModuleInfo.installationFree));
43 object->SetProperty("mainElementName", CreateJsValue(engine, hapModuleInfo.mainElementName));
44 object->SetProperty("hashValue", CreateJsValue(engine, hapModuleInfo.hashValue));
45
46 SetProperty(engine, object, hapModuleInfo.reqCapabilities, "reqCapabilities");
47 SetProperty(engine, object, hapModuleInfo.deviceTypes, "deviceTypes");
48
49 NativeValue *abilityArrayValue = engine.CreateArray(hapModuleInfo.abilityInfos.size());
50 NativeArray *abilityArray = ConvertNativeValueTo<NativeArray>(abilityArrayValue);
51 if (abilityArray != nullptr) {
52 int index = 0;
53 for (auto abilityInfo : hapModuleInfo.abilityInfos) {
54 abilityArray->SetElement(index++, CreateJsAbilityInfo(engine, abilityInfo));
55 }
56 }
57 object->SetProperty("abilityInfo", abilityArrayValue);
58
59 NativeValue *extensionArrayValue = engine.CreateArray(hapModuleInfo.extensionInfos.size());
60 NativeArray *extensionArray = ConvertNativeValueTo<NativeArray>(extensionArrayValue);
61 if (extensionArray != nullptr) {
62 int index = 0;
63 for (auto extensionInfo : hapModuleInfo.extensionInfos) {
64 extensionArray->SetElement(index++, CreateJsExtensionAbilityInfo(engine, extensionInfo));
65 }
66 }
67 object->SetProperty("extensionAbilityInfo", extensionArrayValue);
68
69 NativeValue *metadataArrayValue = engine.CreateArray(hapModuleInfo.metadata.size());
70 NativeArray *metadataArray = ConvertNativeValueTo<NativeArray>(metadataArrayValue);
71 if (metadataArray != nullptr) {
72 int index = 0;
73 for (auto metadata : hapModuleInfo.metadata) {
74 metadataArray->SetElement(index++, CreateJsMetadata(engine, metadata));
75 }
76 }
77 object->SetProperty("metadata", metadataArrayValue);
78
79 return objValue;
80 }
81
SetProperty(NativeEngine & engine,NativeObject * & object,const std::vector<std::string> & properties,const std::string & proName)82 void SetProperty(NativeEngine &engine, NativeObject* &object, const std::vector<std::string> &properties,
83 const std::string &proName)
84 {
85 NativeValue *arrayValue = engine.CreateArray(properties.size());
86 NativeArray *array = ConvertNativeValueTo<NativeArray>(arrayValue);
87 if (array != nullptr) {
88 int index = 0;
89 for (auto property : properties) {
90 array->SetElement(index++, CreateJsValue(engine, property));
91 }
92 }
93 object->SetProperty(proName.c_str(), arrayValue);
94 }
95 } // namespace AbilityRuntime
96 } // namespace OHOS
97