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 
16 package ohos;
17 
18 import java.util.HashMap;
19 import java.util.List;
20 import java.util.ArrayList;
21 import java.util.Map;
22 
23 /**
24  * collection of method for ModuleAdaption.
25  *
26  */
27 class 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      */
convertToUncompressResult(ModuleResult moduleResult)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      */
convertToAppInfo(ModuleAppInfo moduleAppInfo)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      */
convertToDeviceConfig(ModuleAppInfo moduleAppInfo)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      */
convertToHapInfo(ModuleInfo moduleInfo)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      */
convertToShortcut(List<ModuleShortcut> moduleShortcuts)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      */
convertToMetadata(List<ModuleMetadataInfo> metadataInfos)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      */
convertToAbilityInfo(List<ModuleAbilityInfo> moduleAbilityInfos)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