1b8a72a62Sopenharmony_ci/*
2b8a72a62Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3b8a72a62Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4b8a72a62Sopenharmony_ci * you may not use this file except in compliance with the License.
5b8a72a62Sopenharmony_ci * You may obtain a copy of the License at
6b8a72a62Sopenharmony_ci *
7b8a72a62Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8b8a72a62Sopenharmony_ci *
9b8a72a62Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10b8a72a62Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11b8a72a62Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12b8a72a62Sopenharmony_ci * See the License for the specific language governing permissions and
13b8a72a62Sopenharmony_ci * limitations under the License.
14b8a72a62Sopenharmony_ci */
15b8a72a62Sopenharmony_ci
16b8a72a62Sopenharmony_cipackage ohos;
17b8a72a62Sopenharmony_ci
18b8a72a62Sopenharmony_ciimport java.util.HashMap;
19b8a72a62Sopenharmony_ciimport java.util.List;
20b8a72a62Sopenharmony_ciimport java.util.ArrayList;
21b8a72a62Sopenharmony_ciimport java.util.Map;
22b8a72a62Sopenharmony_ci
23b8a72a62Sopenharmony_ci/**
24b8a72a62Sopenharmony_ci * collection of method for ModuleAdaption.
25b8a72a62Sopenharmony_ci *
26b8a72a62Sopenharmony_ci */
27b8a72a62Sopenharmony_ciclass ModuleAdaption {
28b8a72a62Sopenharmony_ci
29b8a72a62Sopenharmony_ci    private static final Log LOG = new Log(ModuleAdaption.class.toString());
30b8a72a62Sopenharmony_ci    /**
31b8a72a62Sopenharmony_ci     * convert moduleResult to uncompressResult function.
32b8a72a62Sopenharmony_ci     *
33b8a72a62Sopenharmony_ci     * @param moduleResult for module.json result
34b8a72a62Sopenharmony_ci     * @return  UncomperssResult
35b8a72a62Sopenharmony_ci     */
36b8a72a62Sopenharmony_ci    UncompressResult convertToUncompressResult(ModuleResult moduleResult) {
37b8a72a62Sopenharmony_ci        UncompressResult uncomperssResult = new UncompressResult();
38b8a72a62Sopenharmony_ci        uncomperssResult.setResult(moduleResult.getResult());
39b8a72a62Sopenharmony_ci        uncomperssResult.setMessage(moduleResult.getMessage());
40b8a72a62Sopenharmony_ci        for (String moduelProfile : moduleResult.moduleProfileStr) {
41b8a72a62Sopenharmony_ci            uncomperssResult.addProfileInfoStr(moduelProfile);
42b8a72a62Sopenharmony_ci        }
43b8a72a62Sopenharmony_ci        // adapt pack.info
44b8a72a62Sopenharmony_ci        uncomperssResult.setPackInfos(moduleResult.packInfos);
45b8a72a62Sopenharmony_ci        // adapt profileInfos
46b8a72a62Sopenharmony_ci        for (int i = 0; i < moduleResult.moduleProfileInfos.size(); ++i) {
47b8a72a62Sopenharmony_ci            ModuleProfileInfo moduleProfileInfo = moduleResult.moduleProfileInfos.get(i);
48b8a72a62Sopenharmony_ci            ProfileInfo profileInfo = new ProfileInfo();
49b8a72a62Sopenharmony_ci            profileInfo.hapName = moduleProfileInfo.hapName;
50b8a72a62Sopenharmony_ci            // adapt appInfo
51b8a72a62Sopenharmony_ci            profileInfo.appInfo = convertToAppInfo(moduleProfileInfo.moduleAppInfo);
52b8a72a62Sopenharmony_ci            //adapt deviceconfig
53b8a72a62Sopenharmony_ci            profileInfo.deviceConfig = convertToDeviceConfig(moduleProfileInfo.moduleAppInfo);
54b8a72a62Sopenharmony_ci            // adapt hapInfo
55b8a72a62Sopenharmony_ci            profileInfo.hapInfo = convertToHapInfo(moduleProfileInfo.moduleInfo);
56b8a72a62Sopenharmony_ci            uncomperssResult.addProfileInfo(profileInfo);
57b8a72a62Sopenharmony_ci        }
58b8a72a62Sopenharmony_ci        for (ModuleProfileInfo profileInfo : moduleResult.moduleProfileInfos) {
59b8a72a62Sopenharmony_ci            if (profileInfo.moduleAppInfo != null) {
60b8a72a62Sopenharmony_ci                uncomperssResult.setLabel(profileInfo.moduleAppInfo.label);
61b8a72a62Sopenharmony_ci                uncomperssResult.setIcon(profileInfo.moduleAppInfo.icon);
62b8a72a62Sopenharmony_ci            }
63b8a72a62Sopenharmony_ci        }
64b8a72a62Sopenharmony_ci        return uncomperssResult;
65b8a72a62Sopenharmony_ci    }
66b8a72a62Sopenharmony_ci
67b8a72a62Sopenharmony_ci    /**
68b8a72a62Sopenharmony_ci     * convert ModuleAppInfo to AppInfo function.
69b8a72a62Sopenharmony_ci     *
70b8a72a62Sopenharmony_ci     * @param moduleAppInfo for module.json app result
71b8a72a62Sopenharmony_ci     * @return  AppInfo
72b8a72a62Sopenharmony_ci     */
73b8a72a62Sopenharmony_ci    AppInfo convertToAppInfo(ModuleAppInfo moduleAppInfo) {
74b8a72a62Sopenharmony_ci        AppInfo appInfo = new AppInfo();
75b8a72a62Sopenharmony_ci        if (moduleAppInfo == null) {
76b8a72a62Sopenharmony_ci            LOG.error("convertToAppInfo failed: moduleAppInfo is null");
77b8a72a62Sopenharmony_ci            return appInfo;
78b8a72a62Sopenharmony_ci        }
79b8a72a62Sopenharmony_ci        appInfo.bundleName = moduleAppInfo.bundleName;
80b8a72a62Sopenharmony_ci        appInfo.debug = moduleAppInfo.debug;
81b8a72a62Sopenharmony_ci        appInfo.icon = moduleAppInfo.icon;
82b8a72a62Sopenharmony_ci        appInfo.label = moduleAppInfo.label;
83b8a72a62Sopenharmony_ci        appInfo.setLabels(moduleAppInfo.getLabels());
84b8a72a62Sopenharmony_ci        appInfo.description = moduleAppInfo.description;
85b8a72a62Sopenharmony_ci        appInfo.setDescriptions(moduleAppInfo.getDescriptions());
86b8a72a62Sopenharmony_ci        appInfo.vendor = moduleAppInfo.vendor;
87b8a72a62Sopenharmony_ci        appInfo.versionCode = String.valueOf(moduleAppInfo.versionCode);
88b8a72a62Sopenharmony_ci        appInfo.versionName = moduleAppInfo.versionName;
89b8a72a62Sopenharmony_ci        appInfo.minCompatibleVersionCode = moduleAppInfo.minCompatibleVersionCode;
90b8a72a62Sopenharmony_ci        appInfo.compatibleApiVersion = moduleAppInfo.minAPIVersion;
91b8a72a62Sopenharmony_ci        appInfo.targetApiVersion = moduleAppInfo.targetAPIVersion;
92b8a72a62Sopenharmony_ci        appInfo.releaseType = moduleAppInfo.apiReleaseType;
93b8a72a62Sopenharmony_ci        appInfo.distributedNotificationEnabled = moduleAppInfo.distributedNotificationEnabled;
94b8a72a62Sopenharmony_ci        appInfo.appName = moduleAppInfo.appName;
95b8a72a62Sopenharmony_ci        appInfo.appNameEN = moduleAppInfo.appNameEN;
96b8a72a62Sopenharmony_ci        appInfo.setBundleType(moduleAppInfo.getBundleType());
97b8a72a62Sopenharmony_ci        appInfo.setCompileSdkType(moduleAppInfo.getCompileSdkType());
98b8a72a62Sopenharmony_ci        appInfo.setCompileSdkVersion(moduleAppInfo.getCompileSdkVersion());
99b8a72a62Sopenharmony_ci        appInfo.setTargetBundleName(moduleAppInfo.getTargetBundleName());
100b8a72a62Sopenharmony_ci        appInfo.setTargetPriority(moduleAppInfo.getTargetPriority());
101b8a72a62Sopenharmony_ci        return appInfo;
102b8a72a62Sopenharmony_ci    }
103b8a72a62Sopenharmony_ci
104b8a72a62Sopenharmony_ci    /**
105b8a72a62Sopenharmony_ci     * convert moduleAppInfo deviceTypes to DeviceConfig function.
106b8a72a62Sopenharmony_ci     *
107b8a72a62Sopenharmony_ci     * @param moduleAppInfo for module.json app result
108b8a72a62Sopenharmony_ci     * @return Map<String, DeviceConfig>
109b8a72a62Sopenharmony_ci     */
110b8a72a62Sopenharmony_ci    Map<String, DeviceConfig> convertToDeviceConfig(ModuleAppInfo moduleAppInfo) {
111b8a72a62Sopenharmony_ci        Map<String, DeviceConfig> deviceConfigMap = new HashMap<>();
112b8a72a62Sopenharmony_ci        if (moduleAppInfo == null) {
113b8a72a62Sopenharmony_ci            return deviceConfigMap;
114b8a72a62Sopenharmony_ci        }
115b8a72a62Sopenharmony_ci        for(Map.Entry<String, ModuleDeviceType> entrty : moduleAppInfo.deviceTypes.entrySet()) {
116b8a72a62Sopenharmony_ci            DeviceConfig deviceConfig = new DeviceConfig();
117b8a72a62Sopenharmony_ci            deviceConfig.distributedNotificationEnabled = entrty.getValue().distributedNotificationEnabled;
118b8a72a62Sopenharmony_ci            deviceConfigMap.put(entrty.getKey(), deviceConfig);
119b8a72a62Sopenharmony_ci        }
120b8a72a62Sopenharmony_ci        return deviceConfigMap;
121b8a72a62Sopenharmony_ci    }
122b8a72a62Sopenharmony_ci
123b8a72a62Sopenharmony_ci    /**
124b8a72a62Sopenharmony_ci     * convert moduleInfo to HapInfo function.
125b8a72a62Sopenharmony_ci     *
126b8a72a62Sopenharmony_ci     * @param moduleInfo for module.json module result
127b8a72a62Sopenharmony_ci     * @return HapInfo
128b8a72a62Sopenharmony_ci     */
129b8a72a62Sopenharmony_ci    HapInfo convertToHapInfo(ModuleInfo moduleInfo) {
130b8a72a62Sopenharmony_ci        HapInfo hapInfo = new HapInfo();
131b8a72a62Sopenharmony_ci        if (moduleInfo == null) {
132b8a72a62Sopenharmony_ci            LOG.error("convertToHapInfo failed: moduleInfo is null");
133b8a72a62Sopenharmony_ci            return hapInfo;
134b8a72a62Sopenharmony_ci        }
135b8a72a62Sopenharmony_ci        hapInfo.name = moduleInfo.name;
136b8a72a62Sopenharmony_ci        hapInfo.distro = new Distro();
137b8a72a62Sopenharmony_ci        hapInfo.distro.moduleName = moduleInfo.name;
138b8a72a62Sopenharmony_ci        hapInfo.distro.moduleType = moduleInfo.type;
139b8a72a62Sopenharmony_ci        hapInfo.distro.installationFree = moduleInfo.installationFree;
140b8a72a62Sopenharmony_ci        hapInfo.distro.virtualMachine = moduleInfo.virtualMachine;
141b8a72a62Sopenharmony_ci        hapInfo.distro.deliveryWithInstall = moduleInfo.deliveryWithInstall;
142b8a72a62Sopenharmony_ci        hapInfo.srcEntrance = moduleInfo.srcEntrance;
143b8a72a62Sopenharmony_ci        hapInfo.description = moduleInfo.description;
144b8a72a62Sopenharmony_ci        hapInfo.setDescriptions(moduleInfo.getDescriptions());
145b8a72a62Sopenharmony_ci        hapInfo.process = moduleInfo.process;
146b8a72a62Sopenharmony_ci        hapInfo.mainElement = moduleInfo.mainElement;
147b8a72a62Sopenharmony_ci        hapInfo.deviceType = moduleInfo.deviceTypes;
148b8a72a62Sopenharmony_ci        hapInfo.uiSyntax = moduleInfo.uiSyntax;
149b8a72a62Sopenharmony_ci        // convert pages
150b8a72a62Sopenharmony_ci        hapInfo.pages = moduleInfo.pages;
151b8a72a62Sopenharmony_ci        // convert moduleshortcut to short
152b8a72a62Sopenharmony_ci        hapInfo.shortcuts = convertToShortcut(moduleInfo.moduleShortcuts);
153b8a72a62Sopenharmony_ci        // convert metadata
154b8a72a62Sopenharmony_ci        hapInfo.metaData = convertToMetadata(moduleInfo.moduleMetadataInfos);
155b8a72a62Sopenharmony_ci        // convert abilities
156b8a72a62Sopenharmony_ci        hapInfo.abilities = convertToAbilityInfo(moduleInfo.abilities);
157b8a72a62Sopenharmony_ci        // convert extension abilities to abilities
158b8a72a62Sopenharmony_ci        hapInfo.extensionAbilityInfos = moduleInfo.extensionAbilityInfos;
159b8a72a62Sopenharmony_ci        // convert request permissions
160b8a72a62Sopenharmony_ci        hapInfo.reqPermissions = moduleInfo.requestPermissions;
161b8a72a62Sopenharmony_ci        // convert distrofilter
162b8a72a62Sopenharmony_ci        hapInfo.distroFilter = moduleInfo.distroFilter;
163b8a72a62Sopenharmony_ci        hapInfo.formInfos = moduleInfo.abilityFormInfos;
164b8a72a62Sopenharmony_ci        hapInfo.commonEvents = moduleInfo.commonEvents;
165b8a72a62Sopenharmony_ci        hapInfo.definePermissions = moduleInfo.definePermissions;
166b8a72a62Sopenharmony_ci        hapInfo.moduleAtomicService = moduleInfo.moduleAtomicService;
167b8a72a62Sopenharmony_ci        hapInfo.appModel = moduleInfo.appModel;
168b8a72a62Sopenharmony_ci        hapInfo.dependencies = moduleInfo.dependenies;
169b8a72a62Sopenharmony_ci        hapInfo.proxyData = moduleInfo.proxyData;
170b8a72a62Sopenharmony_ci        return hapInfo;
171b8a72a62Sopenharmony_ci    }
172b8a72a62Sopenharmony_ci
173b8a72a62Sopenharmony_ci    /**
174b8a72a62Sopenharmony_ci     * convert moduleShortcuts to HapInfo Shortcut.
175b8a72a62Sopenharmony_ci     *
176b8a72a62Sopenharmony_ci     * @param moduleShortcuts for module.json shortcut  result
177b8a72a62Sopenharmony_ci     * @return List<Shortcut>
178b8a72a62Sopenharmony_ci     */
179b8a72a62Sopenharmony_ci    List<Shortcut> convertToShortcut(List<ModuleShortcut> moduleShortcuts) {
180b8a72a62Sopenharmony_ci        List<Shortcut> shortcuts = new ArrayList<>();
181b8a72a62Sopenharmony_ci        for (ModuleShortcut value : moduleShortcuts) {
182b8a72a62Sopenharmony_ci            Shortcut shortcut = new Shortcut();
183b8a72a62Sopenharmony_ci            shortcut.shortcutId = value.getShortcutId();
184b8a72a62Sopenharmony_ci            shortcut.label = value.getLabel();
185b8a72a62Sopenharmony_ci            shortcut.icon = value.getIcon();
186b8a72a62Sopenharmony_ci            shortcut.intents = new ArrayList<>();
187b8a72a62Sopenharmony_ci            for (int j = 0; j < value.getWants().size(); ++j) {
188b8a72a62Sopenharmony_ci                Want want = value.getWants().get(j);
189b8a72a62Sopenharmony_ci                IntentInfo intentInfo = new IntentInfo();
190b8a72a62Sopenharmony_ci                intentInfo.targetBundle = want.bundleName;
191b8a72a62Sopenharmony_ci                intentInfo.targetClass = want.abilityName;
192b8a72a62Sopenharmony_ci                shortcut.intents.add(intentInfo);
193b8a72a62Sopenharmony_ci            }
194b8a72a62Sopenharmony_ci            shortcuts.add(shortcut);
195b8a72a62Sopenharmony_ci        }
196b8a72a62Sopenharmony_ci        return shortcuts;
197b8a72a62Sopenharmony_ci    }
198b8a72a62Sopenharmony_ci
199b8a72a62Sopenharmony_ci    /**
200b8a72a62Sopenharmony_ci     * convert metadataInfos to MetaData function.
201b8a72a62Sopenharmony_ci     *
202b8a72a62Sopenharmony_ci     * @param metadataInfos for module.json metadata  result
203b8a72a62Sopenharmony_ci     * @return MetaData
204b8a72a62Sopenharmony_ci     */
205b8a72a62Sopenharmony_ci    MetaData convertToMetadata(List<ModuleMetadataInfo> metadataInfos) {
206b8a72a62Sopenharmony_ci        MetaData metaData = new MetaData();
207b8a72a62Sopenharmony_ci        List<CustomizeData> customizeDatas = new ArrayList<>();
208b8a72a62Sopenharmony_ci        for (ModuleMetadataInfo metadataInfo : metadataInfos) {
209b8a72a62Sopenharmony_ci            CustomizeData customizeData = new CustomizeData();
210b8a72a62Sopenharmony_ci            customizeData.name = metadataInfo.name;
211b8a72a62Sopenharmony_ci            customizeData.value = metadataInfo.value;
212b8a72a62Sopenharmony_ci            customizeData.extra = metadataInfo.resource;
213b8a72a62Sopenharmony_ci            customizeDatas.add(customizeData);
214b8a72a62Sopenharmony_ci        }
215b8a72a62Sopenharmony_ci        metaData.customizeDatas = customizeDatas;
216b8a72a62Sopenharmony_ci        return metaData;
217b8a72a62Sopenharmony_ci    }
218b8a72a62Sopenharmony_ci
219b8a72a62Sopenharmony_ci    /**
220b8a72a62Sopenharmony_ci     * convert ModuleAbilityInfo to AbilityInfo function.
221b8a72a62Sopenharmony_ci     *
222b8a72a62Sopenharmony_ci     * @param moduleAbilityInfos for module.json ability  result
223b8a72a62Sopenharmony_ci     * @return List<AbilityInfo>
224b8a72a62Sopenharmony_ci     */
225b8a72a62Sopenharmony_ci    List<AbilityInfo> convertToAbilityInfo(List<ModuleAbilityInfo> moduleAbilityInfos) {
226b8a72a62Sopenharmony_ci        List<AbilityInfo> abilityInfos = new ArrayList<>();
227b8a72a62Sopenharmony_ci        for (ModuleAbilityInfo info : moduleAbilityInfos) {
228b8a72a62Sopenharmony_ci            AbilityInfo abilityInfo = new AbilityInfo();
229b8a72a62Sopenharmony_ci            abilityInfo.type = "page";
230b8a72a62Sopenharmony_ci            abilityInfo.name = info.name;
231b8a72a62Sopenharmony_ci            abilityInfo.srcEntrance = info.srcEntrance;
232b8a72a62Sopenharmony_ci            abilityInfo.description = info.description;
233b8a72a62Sopenharmony_ci            abilityInfo.setDescriptions(info.getDescriptions());
234b8a72a62Sopenharmony_ci            abilityInfo.launchType = info.launchType;
235b8a72a62Sopenharmony_ci            abilityInfo.icon = info.icon;
236b8a72a62Sopenharmony_ci            abilityInfo.iconPath = info.icon;
237b8a72a62Sopenharmony_ci            abilityInfo.label = info.label;
238b8a72a62Sopenharmony_ci            abilityInfo.setLabels(info.getLabels());
239b8a72a62Sopenharmony_ci            abilityInfo.labelRes = info.label;
240b8a72a62Sopenharmony_ci            abilityInfo.permissions = info.permissions;
241b8a72a62Sopenharmony_ci            abilityInfo.visible = info.visible;
242b8a72a62Sopenharmony_ci            abilityInfo.continuable = info.continuable;
243b8a72a62Sopenharmony_ci            // convert metadata
244b8a72a62Sopenharmony_ci            abilityInfo.metaData = convertToMetadata(info.metadata);
245b8a72a62Sopenharmony_ci            // convert skillInfo
246b8a72a62Sopenharmony_ci            abilityInfo.skills = info.skills;
247b8a72a62Sopenharmony_ci            // convert configchanges
248b8a72a62Sopenharmony_ci            abilityInfo.backgroundModes = info.backgroundModes;
249b8a72a62Sopenharmony_ci            abilityInfos.add(abilityInfo);
250b8a72a62Sopenharmony_ci        }
251b8a72a62Sopenharmony_ci        return abilityInfos;
252b8a72a62Sopenharmony_ci    }
253b8a72a62Sopenharmony_ci}
254