• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 #ifndef FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_BASE_INCLUDE_COMMON_JSON_CONVERTER_H
17 #define FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_BASE_INCLUDE_COMMON_JSON_CONVERTER_H
18 
19 #include "app_log_wrapper.h"
20 #include "json_util.h"
21 
22 namespace OHOS {
23 namespace AppExecFwk {
24 inline constexpr const char* JSON_KEY_NAME = "name";
25 inline constexpr const char* JSON_KEY_PACKAGE = "package";
26 inline constexpr const char* JSON_KEY_APPLICATION_NAME = "applicationName";
27 inline constexpr const char* JSON_KEY_ICON_PATH = "iconPath";
28 inline constexpr const char* JSON_KEY_THEME = "theme";
29 inline constexpr const char* JSON_KEY_KIND = "kind";
30 inline constexpr const char* JSON_KEY_EXTENSION_ABILITY_TYPE = "extensionAbilityType";
31 inline constexpr const char* JSON_KEY_ORIENTATION = "orientation";
32 inline constexpr const char* JSON_KEY_LAUNCH_MODE = "launchMode";
33 inline constexpr const char* JSON_KEY_CODE_PATH = "codePath";
34 inline constexpr const char* JSON_KEY_DEVICE_TYPES = "deviceTypes";
35 inline constexpr const char* JSON_KEY_DEVICE_CAPABILITIES = "deviceCapabilities";
36 inline constexpr const char* JSON_KEY_IS_LAUNCHER_ABILITY = "isLauncherAbility";
37 inline constexpr const char* JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE = "removeMissionAfterTerminate";
38 inline constexpr const char* JSON_KEY_IS_NATIVE_ABILITY = "isNativeAbility";
39 inline constexpr const char* JSON_KEY_SUPPORT_PIP_MODE = "supportPipMode";
40 inline constexpr const char* JSON_KEY_TARGET_ABILITY = "targetAbility";
41 inline constexpr const char* JSON_KEY_CONFIG_CHANGES = "configChanges";
42 inline constexpr const char* JSON_KEY_FORM_ENTITY = "formEntity";
43 inline constexpr const char* JSON_KEY_MIN_FORM_HEIGHT = "minFormHeight";
44 inline constexpr const char* JSON_KEY_DEFAULT_FORM_HEIGHT = "defaultFormHeight";
45 inline constexpr const char* JSON_KEY_MIN_FORM_WIDTH = "minFormWidth";
46 inline constexpr const char* JSON_KEY_DEFAULT_FORM_WIDTH = "defaultFormWidth";
47 inline constexpr const char* JSON_KEY_BACKGROUND_MODES = "backgroundModes";
48 inline constexpr const char* JSON_KEY_CUSTOMIZE_DATA = "customizeData";
49 inline constexpr const char* JSON_KEY_META_DATA = "metaData";
50 inline constexpr const char* JSON_KEY_META_VALUE = "value";
51 inline constexpr const char* JSON_KEY_META_EXTRA = "extra";
52 inline constexpr const char* JSON_KEY_FORM_ENABLED = "formEnabled";
53 inline constexpr const char* JSON_KEY_SRC_PATH = "srcPath";
54 inline constexpr const char* JSON_KEY_SRC_LANGUAGE = "srcLanguage";
55 inline constexpr const char* JSON_KEY_START_WINDOW = "startWindow";
56 inline constexpr const char* JSON_KEY_START_WINDOW_ID = "startWindowId";
57 inline constexpr const char* JSON_KEY_START_WINDOW_RESOURCE = "startWindowResource";
58 inline constexpr const char* JSON_KEY_START_WINDOW_ICON = "startWindowIcon";
59 inline constexpr const char* JSON_KEY_START_WINDOW_ICON_ID = "startWindowIconId";
60 inline constexpr const char* JSON_KEY_START_WINDOW_BACKGROUND = "startWindowBackground";
61 inline constexpr const char* JSON_KEY_START_WINDOW_BACKGROUND_ID = "startWindowBackgroundId";
62 inline constexpr const char* JSON_KEY_IS_MODULE_JSON = "isModuleJson";
63 inline constexpr const char* JSON_KEY_IS_STAGE_BASED_MODEL = "isStageBasedModel";
64 inline constexpr const char* JSON_KEY_IS_CONTINUABLE = "continuable";
65 inline constexpr const char* JSON_KEY_SUPPORT_WINDOW_MODE = "supportWindowMode";
66 inline constexpr const char* JSON_KEY_MAX_WINDOW_RATIO = "maxWindowRatio";
67 inline constexpr const char* JSON_KEY_MIN_WINDOW_RATIO = "minWindowRatio";
68 inline constexpr const char* JSON_KEY_MAX_WINDOW_WIDTH = "maxWindowWidth";
69 inline constexpr const char* JSON_KEY_MIN_WINDOW_WIDTH = "minWindowWidth";
70 inline constexpr const char* JSON_KEY_MAX_WINDOW_HEIGHT = "maxWindowHeight";
71 inline constexpr const char* JSON_KEY_MIN_WINDOW_HEIGHT = "minWindowHeight";
72 inline constexpr const char* JSON_KEY_EXCLUDE_FROM_MISSIONS = "excludeFromMissions";
73 inline constexpr const char* JSON_KEY_UNCLEARABLE_MISSION = "unclearableMission";
74 inline constexpr const char* JSON_KEY_EXCLUDE_FROM_DOCK_MISSION = "excludeFromDock";
75 inline constexpr const char* JSON_KEY_PREFER_MULTI_WINDOW_ORIENTATION_MISSION = "preferMultiWindowOrientation";
76 inline constexpr const char* JSON_KEY_RECOVERABLE = "recoverable";
77 inline constexpr const char* JSON_KEY_SUPPORT_EXT_NAMES = "supportExtNames";
78 inline constexpr const char* JSON_KEY_SUPPORT_MIME_TYPES = "supportMimeTypes";
79 inline constexpr const char* JSON_KEY_ISOLATION_PROCESS = "isolationProcess";
80 inline constexpr const char* JSON_KEY_CONTINUE_TYPE = "continueType";
81 inline constexpr const char* JSON_KEY_ORIENTATION_ID = "orientationId";
82 inline constexpr const char* JSON_KEY_CONTINUE_BUNDLE_NAME = "continueBundleName";
83 
84 template<typename T>
AbilityFromJson(const nlohmann::json & jsonObject,T & abilityInfo)85 void AbilityFromJson(const nlohmann::json &jsonObject, T &abilityInfo)
86 {
87     APP_LOGD("AbilityFromJson begin");
88     const auto &jsonObjectEnd = jsonObject.end();
89     int32_t parseResult = ERR_OK;
90     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
91         jsonObjectEnd,
92         Constants::NAME,
93         abilityInfo.name,
94         false,
95         parseResult);
96     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
97         jsonObjectEnd,
98         Constants::LABEL,
99         abilityInfo.label,
100         false,
101         parseResult);
102     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
103         jsonObjectEnd,
104         Constants::DESCRIPTION,
105         abilityInfo.description,
106         false,
107         parseResult);
108     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
109         jsonObjectEnd,
110         JSON_KEY_ICON_PATH,
111         abilityInfo.iconPath,
112         false,
113         parseResult);
114     GetValueIfFindKey<uint32_t>(jsonObject,
115         jsonObjectEnd,
116         Constants::LABEL_ID,
117         abilityInfo.labelId,
118         JsonType::NUMBER,
119         false,
120         parseResult,
121         ArrayType::NOT_ARRAY);
122     GetValueIfFindKey<uint32_t>(jsonObject,
123         jsonObjectEnd,
124         Constants::DESCRIPTION_ID,
125         abilityInfo.descriptionId,
126         JsonType::NUMBER,
127         false,
128         parseResult,
129         ArrayType::NOT_ARRAY);
130     GetValueIfFindKey<uint32_t>(jsonObject,
131         jsonObjectEnd,
132         Constants::ICON_ID,
133         abilityInfo.iconId,
134         JsonType::NUMBER,
135         false,
136         parseResult,
137         ArrayType::NOT_ARRAY);
138     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
139         jsonObjectEnd,
140         JSON_KEY_THEME,
141         abilityInfo.theme,
142         false,
143         parseResult);
144     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
145         jsonObjectEnd,
146         Constants::VISIBLE,
147         abilityInfo.visible,
148         false,
149         parseResult);
150     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
151         jsonObjectEnd,
152         JSON_KEY_KIND,
153         abilityInfo.kind,
154         false,
155         parseResult);
156     GetValueIfFindKey<AbilityType>(jsonObject,
157         jsonObjectEnd,
158         Constants::TYPE,
159         abilityInfo.type,
160         JsonType::NUMBER,
161         false,
162         parseResult,
163         ArrayType::NOT_ARRAY);
164     GetValueIfFindKey<ExtensionAbilityType>(jsonObject,
165         jsonObjectEnd,
166         JSON_KEY_EXTENSION_ABILITY_TYPE,
167         abilityInfo.extensionAbilityType,
168         JsonType::NUMBER,
169         false,
170         parseResult,
171         ArrayType::NOT_ARRAY);
172     GetValueIfFindKey<DisplayOrientation>(jsonObject,
173         jsonObjectEnd,
174         JSON_KEY_ORIENTATION,
175         abilityInfo.orientation,
176         JsonType::NUMBER,
177         false,
178         parseResult,
179         ArrayType::NOT_ARRAY);
180     GetValueIfFindKey<LaunchMode>(jsonObject,
181         jsonObjectEnd,
182         JSON_KEY_LAUNCH_MODE,
183         abilityInfo.launchMode,
184         JsonType::NUMBER,
185         false,
186         parseResult,
187         ArrayType::NOT_ARRAY);
188     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
189         jsonObjectEnd,
190         JSON_KEY_SRC_PATH,
191         abilityInfo.srcPath,
192         false,
193         parseResult);
194     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
195         jsonObjectEnd,
196         JSON_KEY_SRC_LANGUAGE,
197         abilityInfo.srcLanguage,
198         false,
199         parseResult);
200     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
201         jsonObjectEnd,
202         Constants::ARKTS_MODE,
203         abilityInfo.arkTSMode,
204         false,
205         parseResult);
206     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
207         jsonObjectEnd,
208         Constants::PERMISSIONS,
209         abilityInfo.permissions,
210         JsonType::ARRAY,
211         false,
212         parseResult,
213         ArrayType::STRING);
214     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
215         jsonObjectEnd,
216         Constants::PROCESS,
217         abilityInfo.process,
218         false,
219         parseResult);
220     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
221         jsonObjectEnd,
222         JSON_KEY_DEVICE_TYPES,
223         abilityInfo.deviceTypes,
224         JsonType::ARRAY,
225         false,
226         parseResult,
227         ArrayType::STRING);
228     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
229         jsonObjectEnd,
230         JSON_KEY_DEVICE_CAPABILITIES,
231         abilityInfo.deviceCapabilities,
232         JsonType::ARRAY,
233         false,
234         parseResult,
235         ArrayType::STRING);
236     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
237         jsonObjectEnd,
238         Constants::URI,
239         abilityInfo.uri,
240         false,
241         parseResult);
242     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
243         jsonObjectEnd,
244         JSON_KEY_TARGET_ABILITY,
245         abilityInfo.targetAbility,
246         false,
247         parseResult);
248     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
249         jsonObjectEnd,
250         JSON_KEY_IS_LAUNCHER_ABILITY,
251         abilityInfo.isLauncherAbility,
252         false,
253         parseResult);
254     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
255         jsonObjectEnd,
256         JSON_KEY_IS_NATIVE_ABILITY,
257         abilityInfo.isNativeAbility,
258         false,
259         parseResult);
260     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
261         jsonObjectEnd,
262         Constants::ENABLED,
263         abilityInfo.enabled,
264         false,
265         parseResult);
266     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
267         jsonObjectEnd,
268         JSON_KEY_SUPPORT_PIP_MODE,
269         abilityInfo.supportPipMode,
270         false,
271         parseResult);
272     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
273         jsonObjectEnd,
274         JSON_KEY_FORM_ENABLED,
275         abilityInfo.formEnabled,
276         false,
277         parseResult);
278     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
279         jsonObjectEnd,
280         Constants::READ_PERMISSION,
281         abilityInfo.readPermission,
282         false,
283         parseResult);
284     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
285         jsonObjectEnd,
286         Constants::WRITE_PERMISSION,
287         abilityInfo.writePermission,
288         false,
289         parseResult);
290     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
291         jsonObjectEnd,
292         JSON_KEY_CONFIG_CHANGES,
293         abilityInfo.configChanges,
294         JsonType::ARRAY,
295         false,
296         parseResult,
297         ArrayType::STRING);
298     GetValueIfFindKey<uint32_t>(jsonObject,
299         jsonObjectEnd,
300         JSON_KEY_FORM_ENTITY,
301         abilityInfo.formEntity,
302         JsonType::NUMBER,
303         false,
304         parseResult,
305         ArrayType::NOT_ARRAY);
306     GetValueIfFindKey<int32_t>(jsonObject,
307         jsonObjectEnd,
308         JSON_KEY_MIN_FORM_HEIGHT,
309         abilityInfo.minFormHeight,
310         JsonType::NUMBER,
311         false,
312         parseResult,
313         ArrayType::NOT_ARRAY);
314     GetValueIfFindKey<int32_t>(jsonObject,
315         jsonObjectEnd,
316         JSON_KEY_DEFAULT_FORM_HEIGHT,
317         abilityInfo.defaultFormHeight,
318         JsonType::NUMBER,
319         false,
320         parseResult,
321         ArrayType::NOT_ARRAY);
322     GetValueIfFindKey<int32_t>(jsonObject,
323         jsonObjectEnd,
324         JSON_KEY_MIN_FORM_WIDTH,
325         abilityInfo.minFormWidth,
326         JsonType::NUMBER,
327         false,
328         parseResult,
329         ArrayType::NOT_ARRAY);
330     GetValueIfFindKey<int32_t>(jsonObject,
331         jsonObjectEnd,
332         JSON_KEY_DEFAULT_FORM_WIDTH,
333         abilityInfo.defaultFormWidth,
334         JsonType::NUMBER,
335         false,
336         parseResult,
337         ArrayType::NOT_ARRAY);
338     GetValueIfFindKey<MetaData>(jsonObject,
339         jsonObjectEnd,
340         JSON_KEY_META_DATA,
341         abilityInfo.metaData,
342         JsonType::OBJECT,
343         false,
344         parseResult,
345         ArrayType::NOT_ARRAY);
346     GetValueIfFindKey<uint32_t>(jsonObject,
347         jsonObjectEnd,
348         JSON_KEY_BACKGROUND_MODES,
349         abilityInfo.backgroundModes,
350         JsonType::NUMBER,
351         false,
352         parseResult,
353         ArrayType::NOT_ARRAY);
354     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
355         jsonObjectEnd,
356         JSON_KEY_PACKAGE,
357         abilityInfo.package,
358         false,
359         parseResult);
360     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
361         jsonObjectEnd,
362         Constants::BUNDLE_NAME,
363         abilityInfo.bundleName,
364         false,
365         parseResult);
366     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
367         jsonObjectEnd,
368         Constants::MODULE_NAME,
369         abilityInfo.moduleName,
370         false,
371         parseResult);
372     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
373         jsonObjectEnd,
374         JSON_KEY_APPLICATION_NAME,
375         abilityInfo.applicationName,
376         false,
377         parseResult);
378     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
379         jsonObjectEnd,
380         JSON_KEY_CODE_PATH,
381         abilityInfo.codePath,
382         false,
383         parseResult);
384     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
385         jsonObjectEnd,
386         Constants::RESOURCE_PATH,
387         abilityInfo.resourcePath,
388         false,
389         parseResult);
390     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
391         jsonObjectEnd,
392         Constants::HAP_PATH,
393         abilityInfo.hapPath,
394         false,
395         parseResult);
396     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
397         jsonObjectEnd,
398         Constants::SRC_ENTRANCE,
399         abilityInfo.srcEntrance,
400         false,
401         parseResult);
402     GetValueIfFindKey<std::vector<Metadata>>(jsonObject,
403         jsonObjectEnd,
404         Constants::META_DATA,
405         abilityInfo.metadata,
406         JsonType::ARRAY,
407         false,
408         parseResult,
409         ArrayType::OBJECT);
410     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
411         jsonObjectEnd,
412         JSON_KEY_IS_MODULE_JSON,
413         abilityInfo.isModuleJson,
414         false,
415         parseResult);
416     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
417         jsonObjectEnd,
418         JSON_KEY_IS_STAGE_BASED_MODEL,
419         abilityInfo.isStageBasedModel,
420         false,
421         parseResult);
422     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
423         jsonObjectEnd,
424         JSON_KEY_IS_CONTINUABLE,
425         abilityInfo.continuable,
426         false,
427         parseResult);
428     GetValueIfFindKey<int32_t>(jsonObject,
429         jsonObjectEnd,
430         Constants::PRIORITY,
431         abilityInfo.priority,
432         JsonType::NUMBER,
433         false,
434         parseResult,
435         ArrayType::NOT_ARRAY);
436     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
437         jsonObjectEnd,
438         JSON_KEY_START_WINDOW_ICON,
439         abilityInfo.startWindowIcon,
440         false,
441         parseResult);
442     GetValueIfFindKey<uint32_t>(jsonObject,
443         jsonObjectEnd,
444         JSON_KEY_START_WINDOW_ICON_ID,
445         abilityInfo.startWindowIconId,
446         JsonType::NUMBER,
447         false,
448         parseResult,
449         ArrayType::NOT_ARRAY);
450     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
451         jsonObjectEnd,
452         JSON_KEY_START_WINDOW_BACKGROUND,
453         abilityInfo.startWindowBackground,
454         false,
455         parseResult);
456     GetValueIfFindKey<uint32_t>(jsonObject,
457         jsonObjectEnd,
458         JSON_KEY_START_WINDOW_BACKGROUND_ID,
459         abilityInfo.startWindowBackgroundId,
460         JsonType::NUMBER,
461         false,
462         parseResult,
463         ArrayType::NOT_ARRAY);
464     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
465         jsonObjectEnd,
466         JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE,
467         abilityInfo.removeMissionAfterTerminate,
468         false,
469         parseResult);
470     GetValueIfFindKey<CompileMode>(jsonObject,
471         jsonObjectEnd,
472         Constants::COMPILE_MODE,
473         abilityInfo.compileMode,
474         JsonType::NUMBER,
475         false,
476         parseResult,
477         ArrayType::NOT_ARRAY);
478     GetValueIfFindKey<std::vector<SupportWindowMode>>(jsonObject,
479         jsonObjectEnd,
480         JSON_KEY_SUPPORT_WINDOW_MODE,
481         abilityInfo.windowModes,
482         JsonType::ARRAY,
483         false,
484         parseResult,
485         ArrayType::NUMBER);
486     GetValueIfFindKey<double>(jsonObject,
487         jsonObjectEnd,
488         JSON_KEY_MAX_WINDOW_RATIO,
489         abilityInfo.maxWindowRatio,
490         JsonType::NUMBER,
491         false,
492         parseResult,
493         ArrayType::NOT_ARRAY);
494     GetValueIfFindKey<double>(jsonObject,
495         jsonObjectEnd,
496         JSON_KEY_MIN_WINDOW_RATIO,
497         abilityInfo.minWindowRatio,
498         JsonType::NUMBER,
499         false,
500         parseResult,
501         ArrayType::NOT_ARRAY);
502     GetValueIfFindKey<uint32_t>(jsonObject,
503         jsonObjectEnd,
504         JSON_KEY_MAX_WINDOW_WIDTH,
505         abilityInfo.maxWindowWidth,
506         JsonType::NUMBER,
507         false,
508         parseResult,
509         ArrayType::NOT_ARRAY);
510     GetValueIfFindKey<uint32_t>(jsonObject,
511         jsonObjectEnd,
512         JSON_KEY_MIN_WINDOW_WIDTH,
513         abilityInfo.minWindowWidth,
514         JsonType::NUMBER,
515         false,
516         parseResult,
517         ArrayType::NOT_ARRAY);
518     GetValueIfFindKey<uint32_t>(jsonObject,
519         jsonObjectEnd,
520         JSON_KEY_MAX_WINDOW_HEIGHT,
521         abilityInfo.maxWindowHeight,
522         JsonType::NUMBER,
523         false,
524         parseResult,
525         ArrayType::NOT_ARRAY);
526     GetValueIfFindKey<uint32_t>(jsonObject,
527         jsonObjectEnd,
528         JSON_KEY_MIN_WINDOW_HEIGHT,
529         abilityInfo.minWindowHeight,
530         JsonType::NUMBER,
531         false,
532         parseResult,
533         ArrayType::NOT_ARRAY);
534     GetValueIfFindKey<int32_t>(jsonObject,
535         jsonObjectEnd,
536         Constants::UID,
537         abilityInfo.uid,
538         JsonType::NUMBER,
539         false,
540         parseResult,
541         ArrayType::NOT_ARRAY);
542     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
543         jsonObjectEnd,
544         JSON_KEY_EXCLUDE_FROM_MISSIONS,
545         abilityInfo.excludeFromMissions,
546         false,
547         parseResult);
548     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
549         jsonObjectEnd,
550         JSON_KEY_UNCLEARABLE_MISSION,
551         abilityInfo.unclearableMission,
552         false,
553         parseResult);
554     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
555         jsonObjectEnd,
556         JSON_KEY_EXCLUDE_FROM_DOCK_MISSION,
557         abilityInfo.excludeFromDock,
558         false,
559         parseResult);
560     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
561         jsonObjectEnd,
562         JSON_KEY_PREFER_MULTI_WINDOW_ORIENTATION_MISSION,
563         abilityInfo.preferMultiWindowOrientation,
564         false,
565         parseResult);
566     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
567         jsonObjectEnd,
568         JSON_KEY_RECOVERABLE,
569         abilityInfo.recoverable,
570         false,
571         parseResult);
572     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
573         jsonObjectEnd,
574         JSON_KEY_SUPPORT_EXT_NAMES,
575         abilityInfo.supportExtNames,
576         JsonType::ARRAY,
577         false,
578         parseResult,
579         ArrayType::STRING);
580     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
581         jsonObjectEnd,
582         JSON_KEY_SUPPORT_MIME_TYPES,
583         abilityInfo.supportMimeTypes,
584         JsonType::ARRAY,
585         false,
586         parseResult,
587         ArrayType::STRING);
588     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
589         jsonObjectEnd,
590         JSON_KEY_ISOLATION_PROCESS,
591         abilityInfo.isolationProcess,
592         false,
593         parseResult);
594     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
595         jsonObjectEnd,
596         JSON_KEY_CONTINUE_TYPE,
597         abilityInfo.continueType,
598         JsonType::ARRAY,
599         false,
600         parseResult,
601         ArrayType::STRING);
602     GetValueIfFindKey<std::unordered_set<std::string>>(jsonObject,
603         jsonObjectEnd,
604         JSON_KEY_CONTINUE_BUNDLE_NAME,
605         abilityInfo.continueBundleNames,
606         JsonType::ARRAY,
607         false,
608         parseResult,
609         ArrayType::STRING);
610     GetValueIfFindKey<std::vector<Skill>>(jsonObject,
611         jsonObjectEnd,
612         Constants::SKILLS,
613         abilityInfo.skills,
614         JsonType::ARRAY,
615         false,
616         parseResult,
617         ArrayType::OBJECT);
618     GetValueIfFindKey<int32_t>(jsonObject,
619         jsonObjectEnd,
620         Constants::APP_INDEX,
621         abilityInfo.appIndex,
622         JsonType::NUMBER,
623         false,
624         parseResult,
625         ArrayType::NOT_ARRAY);
626     GetValueIfFindKey<uint32_t>(jsonObject,
627         jsonObjectEnd,
628         JSON_KEY_ORIENTATION_ID,
629         abilityInfo.orientationId,
630         JsonType::NUMBER,
631         false,
632         parseResult,
633         ArrayType::NOT_ARRAY);
634     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
635         jsonObjectEnd,
636         JSON_KEY_START_WINDOW,
637         abilityInfo.startWindow,
638         false,
639         parseResult);
640     GetValueIfFindKey<uint32_t>(jsonObject,
641         jsonObjectEnd,
642         JSON_KEY_START_WINDOW_ID,
643         abilityInfo.startWindowId,
644         JsonType::NUMBER,
645         false,
646         parseResult,
647         ArrayType::NOT_ARRAY);
648     GetValueIfFindKey<StartWindowResource>(jsonObject,
649         jsonObjectEnd,
650         JSON_KEY_START_WINDOW_RESOURCE,
651         abilityInfo.startWindowResource,
652         JsonType::OBJECT,
653         false,
654         parseResult,
655         ArrayType::NOT_ARRAY);
656     if (parseResult != ERR_OK) {
657         APP_LOGE("AbilityFromJson error : %{public}d", parseResult);
658     }
659 }
660 
661 template<typename T>
AbilityToJson(nlohmann::json & jsonObject,const T & abilityInfo)662 void AbilityToJson(nlohmann::json &jsonObject, const T &abilityInfo)
663 {
664     APP_LOGD("AbilityToJson begin");
665     jsonObject = nlohmann::json {
666         {Constants::NAME, abilityInfo.name},
667         {Constants::LABEL, abilityInfo.label},
668         {Constants::DESCRIPTION, abilityInfo.description},
669         {JSON_KEY_ICON_PATH, abilityInfo.iconPath},
670         {Constants::LABEL_ID, abilityInfo.labelId},
671         {Constants::DESCRIPTION_ID, abilityInfo.descriptionId},
672         {Constants::ICON_ID, abilityInfo.iconId},
673         {JSON_KEY_THEME, abilityInfo.theme},
674         {Constants::VISIBLE, abilityInfo.visible},
675         {JSON_KEY_KIND, abilityInfo.kind},
676         {Constants::TYPE, abilityInfo.type},
677         {JSON_KEY_EXTENSION_ABILITY_TYPE, abilityInfo.extensionAbilityType},
678         {JSON_KEY_ORIENTATION, abilityInfo.orientation},
679         {JSON_KEY_LAUNCH_MODE, abilityInfo.launchMode},
680         {JSON_KEY_SRC_PATH, abilityInfo.srcPath},
681         {JSON_KEY_SRC_LANGUAGE, abilityInfo.srcLanguage},
682         {Constants::ARKTS_MODE, abilityInfo.arkTSMode},
683         {Constants::PERMISSIONS, abilityInfo.permissions},
684         {Constants::PROCESS, abilityInfo.process},
685         {JSON_KEY_DEVICE_TYPES, abilityInfo.deviceTypes},
686         {JSON_KEY_DEVICE_CAPABILITIES, abilityInfo.deviceCapabilities},
687         {Constants::URI, abilityInfo.uri},
688         {JSON_KEY_TARGET_ABILITY, abilityInfo.targetAbility},
689         {JSON_KEY_IS_LAUNCHER_ABILITY, abilityInfo.isLauncherAbility},
690         {JSON_KEY_IS_NATIVE_ABILITY, abilityInfo.isNativeAbility},
691         {Constants::ENABLED, abilityInfo.enabled},
692         {JSON_KEY_SUPPORT_PIP_MODE, abilityInfo.supportPipMode},
693         {JSON_KEY_FORM_ENABLED, abilityInfo.formEnabled},
694         {Constants::READ_PERMISSION, abilityInfo.readPermission},
695         {Constants::WRITE_PERMISSION, abilityInfo.writePermission},
696         {JSON_KEY_CONFIG_CHANGES, abilityInfo.configChanges},
697         {JSON_KEY_FORM_ENTITY, abilityInfo.formEntity},
698         {JSON_KEY_MIN_FORM_HEIGHT, abilityInfo.minFormHeight},
699         {JSON_KEY_DEFAULT_FORM_HEIGHT, abilityInfo.defaultFormHeight},
700         {JSON_KEY_MIN_FORM_WIDTH, abilityInfo.minFormWidth},
701         {JSON_KEY_DEFAULT_FORM_WIDTH, abilityInfo.defaultFormWidth},
702         {JSON_KEY_META_DATA, abilityInfo.metaData},
703         {JSON_KEY_BACKGROUND_MODES, abilityInfo.backgroundModes},
704         {JSON_KEY_PACKAGE, abilityInfo.package},
705         {Constants::BUNDLE_NAME, abilityInfo.bundleName},
706         {Constants::MODULE_NAME, abilityInfo.moduleName},
707         {JSON_KEY_APPLICATION_NAME, abilityInfo.applicationName},
708         {JSON_KEY_CODE_PATH, abilityInfo.codePath},
709         {Constants::RESOURCE_PATH, abilityInfo.resourcePath},
710         {Constants::HAP_PATH, abilityInfo.hapPath},
711         {Constants::SRC_ENTRANCE, abilityInfo.srcEntrance},
712         {Constants::META_DATA, abilityInfo.metadata},
713         {JSON_KEY_IS_MODULE_JSON, abilityInfo.isModuleJson},
714         {JSON_KEY_IS_STAGE_BASED_MODEL, abilityInfo.isStageBasedModel},
715         {JSON_KEY_IS_CONTINUABLE, abilityInfo.continuable},
716         {Constants::PRIORITY, abilityInfo.priority},
717         {JSON_KEY_START_WINDOW, abilityInfo.startWindow},
718         {JSON_KEY_START_WINDOW_ID, abilityInfo.startWindowId},
719         {JSON_KEY_START_WINDOW_ICON, abilityInfo.startWindowIcon},
720         {JSON_KEY_START_WINDOW_ICON_ID, abilityInfo.startWindowIconId},
721         {JSON_KEY_START_WINDOW_BACKGROUND, abilityInfo.startWindowBackground},
722         {JSON_KEY_START_WINDOW_BACKGROUND_ID, abilityInfo.startWindowBackgroundId},
723         {JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE, abilityInfo.removeMissionAfterTerminate},
724         {Constants::COMPILE_MODE, abilityInfo.compileMode},
725         {JSON_KEY_SUPPORT_WINDOW_MODE, abilityInfo.windowModes},
726         {JSON_KEY_MAX_WINDOW_WIDTH, abilityInfo.maxWindowWidth},
727         {JSON_KEY_MIN_WINDOW_WIDTH, abilityInfo.minWindowWidth},
728         {JSON_KEY_MAX_WINDOW_HEIGHT, abilityInfo.maxWindowHeight},
729         {JSON_KEY_MIN_WINDOW_HEIGHT, abilityInfo.minWindowHeight},
730         {Constants::UID, abilityInfo.uid},
731         {JSON_KEY_EXCLUDE_FROM_MISSIONS, abilityInfo.excludeFromMissions},
732         {JSON_KEY_UNCLEARABLE_MISSION, abilityInfo.unclearableMission},
733         {JSON_KEY_EXCLUDE_FROM_DOCK_MISSION, abilityInfo.excludeFromDock},
734         {JSON_KEY_PREFER_MULTI_WINDOW_ORIENTATION_MISSION, abilityInfo.preferMultiWindowOrientation},
735         {JSON_KEY_RECOVERABLE, abilityInfo.recoverable},
736         {JSON_KEY_SUPPORT_EXT_NAMES, abilityInfo.supportExtNames},
737         {JSON_KEY_SUPPORT_MIME_TYPES, abilityInfo.supportMimeTypes},
738         {JSON_KEY_ISOLATION_PROCESS, abilityInfo.isolationProcess},
739         {JSON_KEY_CONTINUE_TYPE, abilityInfo.continueType},
740         {JSON_KEY_CONTINUE_BUNDLE_NAME, abilityInfo.continueBundleNames},
741         {Constants::SKILLS, abilityInfo.skills},
742         {Constants::APP_INDEX, abilityInfo.appIndex},
743         {JSON_KEY_ORIENTATION_ID, abilityInfo.orientationId},
744         {JSON_KEY_START_WINDOW_RESOURCE, abilityInfo.startWindowResource}
745     };
746     if (abilityInfo.maxWindowRatio == 0) {
747         // maxWindowRatio in json string will be 0 instead of 0.0
748         jsonObject[JSON_KEY_MAX_WINDOW_RATIO] = 0;
749     } else {
750         jsonObject[JSON_KEY_MAX_WINDOW_RATIO] = abilityInfo.maxWindowRatio;
751     }
752 
753     if (abilityInfo.minWindowRatio == 0) {
754         jsonObject[JSON_KEY_MIN_WINDOW_RATIO] = 0;
755     } else {
756         jsonObject[JSON_KEY_MIN_WINDOW_RATIO] = abilityInfo.minWindowRatio;
757     }
758 }
759 
760 template<typename T>
ExtensionFromJson(const nlohmann::json & jsonObject,T & extensionInfo)761 void ExtensionFromJson(const nlohmann::json &jsonObject, T &extensionInfo)
762 {
763     APP_LOGD("ExtensionFromJson begin");
764     const auto &jsonObjectEnd = jsonObject.end();
765     int32_t parseResult = ERR_OK;
766     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
767         jsonObjectEnd,
768         Constants::BUNDLE_NAME,
769         extensionInfo.bundleName,
770         false,
771         parseResult);
772     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
773         jsonObjectEnd,
774         Constants::MODULE_NAME,
775         extensionInfo.moduleName,
776         false,
777         parseResult);
778     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
779         jsonObjectEnd,
780         Constants::NAME,
781         extensionInfo.name,
782         false,
783         parseResult);
784     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
785         jsonObjectEnd,
786         Constants::SRC_ENTRANCE,
787         extensionInfo.srcEntrance,
788         false,
789         parseResult);
790     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
791         jsonObjectEnd,
792         Constants::ICON,
793         extensionInfo.icon,
794         false,
795         parseResult);
796     GetValueIfFindKey<uint32_t>(jsonObject,
797         jsonObjectEnd,
798         Constants::ICON_ID,
799         extensionInfo.iconId,
800         JsonType::NUMBER,
801         false,
802         parseResult,
803         ArrayType::NOT_ARRAY);
804     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
805         jsonObjectEnd,
806         Constants::LABEL,
807         extensionInfo.label,
808         false,
809         parseResult);
810     GetValueIfFindKey<uint32_t>(jsonObject,
811         jsonObjectEnd,
812         Constants::LABEL_ID,
813         extensionInfo.labelId,
814         JsonType::NUMBER,
815         false,
816         parseResult,
817         ArrayType::NOT_ARRAY);
818     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
819         jsonObjectEnd,
820         Constants::DESCRIPTION,
821         extensionInfo.description,
822         false,
823         parseResult);
824     GetValueIfFindKey<uint32_t>(jsonObject,
825         jsonObjectEnd,
826         Constants::DESCRIPTION_ID,
827         extensionInfo.descriptionId,
828         JsonType::NUMBER,
829         false,
830         parseResult,
831         ArrayType::NOT_ARRAY);
832     GetValueIfFindKey<int32_t>(jsonObject,
833         jsonObjectEnd,
834         Constants::PRIORITY,
835         extensionInfo.priority,
836         JsonType::NUMBER,
837         false,
838         parseResult,
839         ArrayType::NOT_ARRAY);
840     GetValueIfFindKey<ExtensionAbilityType>(jsonObject,
841         jsonObjectEnd,
842         Constants::TYPE,
843         extensionInfo.type,
844         JsonType::NUMBER,
845         false,
846         parseResult,
847         ArrayType::NOT_ARRAY);
848     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
849         jsonObjectEnd,
850         Constants::EXTENSION_TYPE_NAME,
851         extensionInfo.extensionTypeName,
852         false,
853         parseResult);
854     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
855         jsonObjectEnd,
856         Constants::READ_PERMISSION,
857         extensionInfo.readPermission,
858         false,
859         parseResult);
860     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
861         jsonObjectEnd,
862         Constants::WRITE_PERMISSION,
863         extensionInfo.writePermission,
864         false,
865         parseResult);
866     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
867         jsonObjectEnd,
868         Constants::URI,
869         extensionInfo.uri,
870         false,
871         parseResult);
872     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
873         jsonObjectEnd,
874         Constants::PERMISSIONS,
875         extensionInfo.permissions,
876         JsonType::ARRAY,
877         false,
878         parseResult,
879         ArrayType::STRING);
880     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
881         jsonObjectEnd,
882         Constants::APPIDENTIFIER_ALLOW_LIST,
883         extensionInfo.appIdentifierAllowList,
884         JsonType::ARRAY,
885         false,
886         parseResult,
887         ArrayType::STRING);
888     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
889         jsonObjectEnd,
890         Constants::VISIBLE,
891         extensionInfo.visible,
892         false,
893         parseResult);
894     GetValueIfFindKey<std::vector<Metadata>>(jsonObject,
895         jsonObjectEnd,
896         Constants::META_DATA,
897         extensionInfo.metadata,
898         JsonType::ARRAY,
899         false,
900         parseResult,
901         ArrayType::OBJECT);
902     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
903         jsonObjectEnd,
904         Constants::RESOURCE_PATH,
905         extensionInfo.resourcePath,
906         false,
907         parseResult);
908     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
909         jsonObjectEnd,
910         Constants::HAP_PATH,
911         extensionInfo.hapPath,
912         false,
913         parseResult);
914     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
915         jsonObjectEnd,
916         Constants::ENABLED,
917         extensionInfo.enabled,
918         false,
919         parseResult);
920     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
921         jsonObjectEnd,
922         Constants::PROCESS,
923         extensionInfo.process,
924         false,
925         parseResult);
926     GetValueIfFindKey<CompileMode>(jsonObject,
927         jsonObjectEnd,
928         Constants::COMPILE_MODE,
929         extensionInfo.compileMode,
930         JsonType::NUMBER,
931         false,
932         parseResult,
933         ArrayType::NOT_ARRAY);
934     GetValueIfFindKey<int32_t>(jsonObject,
935         jsonObjectEnd,
936         Constants::UID,
937         extensionInfo.uid,
938         JsonType::NUMBER,
939         false,
940         parseResult,
941         ArrayType::NOT_ARRAY);
942     GetValueIfFindKey<int32_t>(jsonObject,
943         jsonObjectEnd,
944         Constants::APP_INDEX,
945         extensionInfo.appIndex,
946         JsonType::NUMBER,
947         false,
948         parseResult,
949         ArrayType::NOT_ARRAY);
950     GetValueIfFindKey<ExtensionProcessMode>(jsonObject,
951         jsonObjectEnd,
952         Constants::EXTENSION_PROCESS_MODE,
953         extensionInfo.extensionProcessMode,
954         JsonType::NUMBER,
955         false,
956         parseResult,
957         ArrayType::NOT_ARRAY);
958     GetValueIfFindKey<std::vector<Skill>>(jsonObject,
959         jsonObjectEnd,
960         Constants::SKILLS,
961         extensionInfo.skills,
962         JsonType::ARRAY,
963         false,
964         parseResult,
965         ArrayType::OBJECT);
966     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
967         jsonObjectEnd,
968         Constants::NEED_CREATE_SANDBOX,
969         extensionInfo.needCreateSandbox,
970         false,
971         parseResult);
972     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
973         jsonObjectEnd,
974         Constants::DATA_GROUP_IDS,
975         extensionInfo.dataGroupIds,
976         JsonType::ARRAY,
977         false,
978         parseResult,
979         ArrayType::STRING);
980     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
981         jsonObjectEnd,
982         Constants::VALID_DATA_GROUP_IDS,
983         extensionInfo.validDataGroupIds,
984         JsonType::ARRAY,
985         false,
986         parseResult,
987         ArrayType::STRING);
988     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
989         jsonObjectEnd,
990         Constants::CUSTOM_PROCESS,
991         extensionInfo.customProcess,
992         false,
993         parseResult);
994     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
995         jsonObjectEnd,
996         Constants::ISOLATION_PROCESS,
997         extensionInfo.isolationProcess,
998         false,
999         parseResult);
1000     BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
1001         jsonObjectEnd,
1002         Constants::ARKTS_MODE,
1003         extensionInfo.arkTSMode,
1004         false,
1005         parseResult);
1006     if (parseResult != ERR_OK) {
1007         APP_LOGE("ExtensionFromJson error : %{public}d", parseResult);
1008     }
1009 }
1010 
1011 template<typename T>
ExtensionToJson(nlohmann::json & jsonObject,const T & extensionInfo)1012 void ExtensionToJson(nlohmann::json &jsonObject, const T &extensionInfo)
1013 {
1014     APP_LOGD("ExtensionToJson begin");
1015     jsonObject = nlohmann::json {
1016         {Constants::BUNDLE_NAME, extensionInfo.bundleName},
1017         {Constants::MODULE_NAME, extensionInfo.moduleName},
1018         {Constants::NAME, extensionInfo.name},
1019         {Constants::SRC_ENTRANCE, extensionInfo.srcEntrance},
1020         {Constants::ICON, extensionInfo.icon},
1021         {Constants::ICON_ID, extensionInfo.iconId},
1022         {Constants::LABEL, extensionInfo.label},
1023         {Constants::LABEL_ID, extensionInfo.labelId},
1024         {Constants::DESCRIPTION, extensionInfo.description},
1025         {Constants::DESCRIPTION_ID, extensionInfo.descriptionId},
1026         {Constants::PRIORITY, extensionInfo.priority},
1027         {Constants::TYPE, extensionInfo.type},
1028         {Constants::EXTENSION_TYPE_NAME, extensionInfo.extensionTypeName},
1029         {Constants::READ_PERMISSION, extensionInfo.readPermission},
1030         {Constants::WRITE_PERMISSION, extensionInfo.writePermission},
1031         {Constants::URI, extensionInfo.uri},
1032         {Constants::PERMISSIONS, extensionInfo.permissions},
1033         {Constants::APPIDENTIFIER_ALLOW_LIST, extensionInfo.appIdentifierAllowList},
1034         {Constants::VISIBLE, extensionInfo.visible},
1035         {Constants::META_DATA, extensionInfo.metadata},
1036         {Constants::RESOURCE_PATH, extensionInfo.resourcePath},
1037         {Constants::HAP_PATH, extensionInfo.hapPath},
1038         {Constants::ENABLED, extensionInfo.enabled},
1039         {Constants::PROCESS, extensionInfo.process},
1040         {Constants::COMPILE_MODE, extensionInfo.compileMode},
1041         {Constants::UID, extensionInfo.uid},
1042         {Constants::APP_INDEX, extensionInfo.appIndex},
1043         {Constants::EXTENSION_PROCESS_MODE, extensionInfo.extensionProcessMode},
1044         {Constants::SKILLS, extensionInfo.skills},
1045         {Constants::NEED_CREATE_SANDBOX, extensionInfo.needCreateSandbox},
1046         {Constants::DATA_GROUP_IDS, extensionInfo.dataGroupIds},
1047         {Constants::VALID_DATA_GROUP_IDS, extensionInfo.validDataGroupIds},
1048         {Constants::CUSTOM_PROCESS, extensionInfo.customProcess},
1049         {Constants::ISOLATION_PROCESS, extensionInfo.isolationProcess},
1050         {Constants::ARKTS_MODE, extensionInfo.arkTSMode}
1051     };
1052 }
1053 } // namespace AppExecFwk
1054 } // namespace OHOS
1055 #endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_BASE_INCLUDE_COMMON_JSON_CONVERTER_H