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