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