1b8a72a62Sopenharmony_ci/*
2b8a72a62Sopenharmony_ci * Copyright (c) 2021-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.AbstractMap;
19b8a72a62Sopenharmony_ciimport java.util.HashMap;
20b8a72a62Sopenharmony_ciimport java.util.Map;
21b8a72a62Sopenharmony_ciimport java.util.function.Function;
22b8a72a62Sopenharmony_ci
23b8a72a62Sopenharmony_ci/**
24b8a72a62Sopenharmony_ci * command parser.
25b8a72a62Sopenharmony_ci *
26b8a72a62Sopenharmony_ci */
27b8a72a62Sopenharmony_cipublic class CommandParser {
28b8a72a62Sopenharmony_ci    /**
29b8a72a62Sopenharmony_ci     * Parses and returns the hap list that supports the device type.
30b8a72a62Sopenharmony_ci     */
31b8a72a62Sopenharmony_ci    public static final String PARSE_MODE_HAPLIST = "hap-list";
32b8a72a62Sopenharmony_ci
33b8a72a62Sopenharmony_ci    /**
34b8a72a62Sopenharmony_ci     * Parses and returns the information about the hap.
35b8a72a62Sopenharmony_ci     */
36b8a72a62Sopenharmony_ci    public static final String PARSE_MODE_HAPINFO = "hap-info";
37b8a72a62Sopenharmony_ci
38b8a72a62Sopenharmony_ci    private static final String CMD_MODE = "--mode";
39b8a72a62Sopenharmony_ci    private static final String CMD_JSON_PATH = "--json-path";
40b8a72a62Sopenharmony_ci    private static final String CMD_PROFILE_PATH = "--profile-path";
41b8a72a62Sopenharmony_ci    private static final String CMD_INDEX_PATH = "--index-path";
42b8a72a62Sopenharmony_ci    private static final String CMD_JS_PATH = "--js-path";
43b8a72a62Sopenharmony_ci    private static final String CMD_ETS_PATH = "--ets-path";
44b8a72a62Sopenharmony_ci    private static final String CMD_HNP_PATH = "--hnp-path";
45b8a72a62Sopenharmony_ci    private static final String CMD_RPCID_PATH = "--rpcid-path";
46b8a72a62Sopenharmony_ci    private static final String CMD_RPCID = "--rpcid";
47b8a72a62Sopenharmony_ci    private static final String CMD_SO_PATH = "--maple-so-path";
48b8a72a62Sopenharmony_ci    private static final String CMD_SO_DIR = "--maple-so-dir";
49b8a72a62Sopenharmony_ci    private static final String CMD_ABILITY_SO_PATH = "--ability-so-path";
50b8a72a62Sopenharmony_ci    private static final String CMD_DEX_PATH = "--dex-path";
51b8a72a62Sopenharmony_ci    private static final String CMD_ABC_PATH = "--abc-path";
52b8a72a62Sopenharmony_ci    private static final String CMD_FILE_PATH = "--file-path";
53b8a72a62Sopenharmony_ci    private static final String CMD_LIB_PATH = "--lib-path";
54b8a72a62Sopenharmony_ci    private static final String CMD_RES_PATH = "--res-path";
55b8a72a62Sopenharmony_ci    private static final String CMD_RESOURCES_PATH = "--resources-path";
56b8a72a62Sopenharmony_ci    private static final String CMD_ASSETS_PATH = "--assets-path";
57b8a72a62Sopenharmony_ci    private static final String CMD_APK_PATH = "--shell-apk-path";
58b8a72a62Sopenharmony_ci    private static final String CMD_HAP_PATH = "--hap-path";
59b8a72a62Sopenharmony_ci    private static final String CMD_APP_PATH = "--app-path";
60b8a72a62Sopenharmony_ci    private static final String CMD_SIGNATURE_PATH = "--signature-path";
61b8a72a62Sopenharmony_ci    private static final String CMD_CERTIFICATE_PATH = "--certificate-path";
62b8a72a62Sopenharmony_ci    private static final String CMD_FORCE = "--force";
63b8a72a62Sopenharmony_ci    private static final String CMD_OUT_PATH = "--out-path";
64b8a72a62Sopenharmony_ci    private static final String CMD_PACK_INFO_PATH = "--pack-info-path";
65b8a72a62Sopenharmony_ci    private static final String CMD_ENCRYPT_PATH = "--encrypt-path";
66b8a72a62Sopenharmony_ci    private static final String CMD_BIN_PATH = "--bin-path";
67b8a72a62Sopenharmony_ci    private static final String CMD_JAR_PATH = "--jar-path";
68b8a72a62Sopenharmony_ci    private static final String CMD_TXT_PATH = "--txt-path";
69b8a72a62Sopenharmony_ci    private static final String CMD_HAR_PATH = "--har-path";
70b8a72a62Sopenharmony_ci    private static final String CMD_HSP_PATH = "--hsp-path";
71b8a72a62Sopenharmony_ci    private static final String CMD_PARSE_MODE = "--p";
72b8a72a62Sopenharmony_ci    private static final String CMD_PACK_RES_PATH = "--pack-res-path";
73b8a72a62Sopenharmony_ci    private static final String CMD_UNPACKAPK = "--unpackapk";
74b8a72a62Sopenharmony_ci    private static final String CMD_UNPACK_CUT_ENTRY_APK = "--unpack-cut_entry";
75b8a72a62Sopenharmony_ci    private static final String CMD_SHAREDLIBS_PATH = "--shared-libs-path";
76b8a72a62Sopenharmony_ci    private static final String CMD_ENTRYCARD_PATH = "--entrycard-path";
77b8a72a62Sopenharmony_ci    private static final String CMD_HAP_LIST = "--hap-list";
78b8a72a62Sopenharmony_ci    private static final String CMD_HSP_LIST = "--hsp-list";
79b8a72a62Sopenharmony_ci    private static final String CMD_APP_LIST = "--app-list";
80b8a72a62Sopenharmony_ci    private static final String CMD_DIR_LIST = "--dir-list";
81b8a72a62Sopenharmony_ci    private static final String CMD_HQF_LIST = "--hqf-list";
82b8a72a62Sopenharmony_ci    private static final String CMD_APPQF_PATH = "--appqf-path";
83b8a72a62Sopenharmony_ci    private static final String CMD_AN_PATH = "--an-path";
84b8a72a62Sopenharmony_ci    private static final String CMD_AP_PATH = "--ap-path";
85b8a72a62Sopenharmony_ci    private static final String MAIN_MODULE_LIMIT = "--main-module-limit";
86b8a72a62Sopenharmony_ci    private static final String NORMAL_MODULE_LIMIT = "--normal-module-limit";
87b8a72a62Sopenharmony_ci    private static final String TOTAL_LIMIT = "--total-limit";
88b8a72a62Sopenharmony_ci    private static final String VERSION_CODE = "--version-code";
89b8a72a62Sopenharmony_ci    private static final String VERSION_NAME = "--version-name";
90b8a72a62Sopenharmony_ci    private static final String INPUT_LIST = "--input-list";
91b8a72a62Sopenharmony_ci    private static final String INPUT = "--input";
92b8a72a62Sopenharmony_ci    private static final String STAT_DUPLICATE = "--stat-duplicate";
93b8a72a62Sopenharmony_ci    private static final String STAT_SUFFIX = "--stat-suffix";
94b8a72a62Sopenharmony_ci    private static final String STAT_FILE_SIZE = "--stat-file-size";
95b8a72a62Sopenharmony_ci    private static final String CMD_COMPRESS_LEVEL = "--compress-level";
96b8a72a62Sopenharmony_ci    private static final String CMD_PKG_CONTEXT_PATH = "--pkg-context-path";
97b8a72a62Sopenharmony_ci    private static final String CMD_BUNDLE_NAME = "--bundle-name";
98b8a72a62Sopenharmony_ci    private static final String PARSER_STAT_DUPLICATE_ERROR = "code:9132600 " +
99b8a72a62Sopenharmony_ci            "error:statDuplicate is invalid! Must be true or false.";
100b8a72a62Sopenharmony_ci    private static final String PARSER_STAT_SUFFIX_ERROR = "code:9132601 " +
101b8a72a62Sopenharmony_ci            "error:statSuffix is invalid! Must be true or false.";
102b8a72a62Sopenharmony_ci    private static final int PARSE_MODE_VALUE_LENGTH = 2;
103b8a72a62Sopenharmony_ci    private static final Log LOG = new Log(CommandParser.class.toString());
104b8a72a62Sopenharmony_ci    private static final Map<String, Function<Map.Entry<Utility, String>, Boolean>> commandFuncs = new HashMap<>();
105b8a72a62Sopenharmony_ci
106b8a72a62Sopenharmony_ci    static {
107b8a72a62Sopenharmony_ci        initCommandFuncs();
108b8a72a62Sopenharmony_ci    }
109b8a72a62Sopenharmony_ci
110b8a72a62Sopenharmony_ci    private static void initCommandFuncs() {
111b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_MODE, entry -> {
112b8a72a62Sopenharmony_ci            entry.getKey().setMode(entry.getValue());
113b8a72a62Sopenharmony_ci            return true;
114b8a72a62Sopenharmony_ci        });
115b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_JSON_PATH, entry -> {
116b8a72a62Sopenharmony_ci            entry.getKey().setJsonPath(entry.getValue());
117b8a72a62Sopenharmony_ci            return true;
118b8a72a62Sopenharmony_ci        });
119b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_PROFILE_PATH, entry -> {
120b8a72a62Sopenharmony_ci            entry.getKey().setProfilePath(entry.getValue());
121b8a72a62Sopenharmony_ci            return true;
122b8a72a62Sopenharmony_ci        });
123b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_INDEX_PATH, entry -> {
124b8a72a62Sopenharmony_ci            entry.getKey().setIndexPath(entry.getValue());
125b8a72a62Sopenharmony_ci            return true;
126b8a72a62Sopenharmony_ci        });
127b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_JS_PATH, entry -> {
128b8a72a62Sopenharmony_ci            entry.getKey().setJsPath(entry.getValue());
129b8a72a62Sopenharmony_ci            return true;
130b8a72a62Sopenharmony_ci        });
131b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_ETS_PATH, entry -> {
132b8a72a62Sopenharmony_ci            entry.getKey().setEtsPath(entry.getValue());
133b8a72a62Sopenharmony_ci            return true;
134b8a72a62Sopenharmony_ci        });
135b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_HNP_PATH, entry -> {
136b8a72a62Sopenharmony_ci            entry.getKey().setHnpPath(entry.getValue());
137b8a72a62Sopenharmony_ci            return true;
138b8a72a62Sopenharmony_ci        });
139b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_RPCID_PATH, entry -> {
140b8a72a62Sopenharmony_ci            entry.getKey().setRpcidPath(entry.getValue());
141b8a72a62Sopenharmony_ci            return true;
142b8a72a62Sopenharmony_ci        });
143b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_RPCID, entry -> {
144b8a72a62Sopenharmony_ci            entry.getKey().setRpcid(entry.getValue());
145b8a72a62Sopenharmony_ci            return true;
146b8a72a62Sopenharmony_ci        });
147b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_SO_PATH, entry -> {
148b8a72a62Sopenharmony_ci            entry.getKey().setSoPath(entry.getValue());
149b8a72a62Sopenharmony_ci            return true;
150b8a72a62Sopenharmony_ci        });
151b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_SO_DIR, entry -> {
152b8a72a62Sopenharmony_ci            entry.getKey().setSoDir(entry.getValue());
153b8a72a62Sopenharmony_ci            return true;
154b8a72a62Sopenharmony_ci        });
155b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_ABILITY_SO_PATH, entry -> {
156b8a72a62Sopenharmony_ci            entry.getKey().setAbilitySoPath(entry.getValue());
157b8a72a62Sopenharmony_ci            return true;
158b8a72a62Sopenharmony_ci        });
159b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_DEX_PATH, entry -> {
160b8a72a62Sopenharmony_ci            entry.getKey().setDexPath(entry.getValue());
161b8a72a62Sopenharmony_ci            return true;
162b8a72a62Sopenharmony_ci        });
163b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_ABC_PATH, entry -> {
164b8a72a62Sopenharmony_ci            entry.getKey().setAbcPath(entry.getValue());
165b8a72a62Sopenharmony_ci            return true;
166b8a72a62Sopenharmony_ci        });
167b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_FILE_PATH, entry -> {
168b8a72a62Sopenharmony_ci            entry.getKey().setFilePath(entry.getValue());
169b8a72a62Sopenharmony_ci            return true;
170b8a72a62Sopenharmony_ci        });
171b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_LIB_PATH, entry -> {
172b8a72a62Sopenharmony_ci            entry.getKey().setLibPath(entry.getValue());
173b8a72a62Sopenharmony_ci            return true;
174b8a72a62Sopenharmony_ci        });
175b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_RES_PATH, entry -> {
176b8a72a62Sopenharmony_ci            entry.getKey().setResPath(entry.getValue());
177b8a72a62Sopenharmony_ci            return true;
178b8a72a62Sopenharmony_ci        });
179b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_RESOURCES_PATH, entry -> {
180b8a72a62Sopenharmony_ci            entry.getKey().setResourcesPath(entry.getValue());
181b8a72a62Sopenharmony_ci            return true;
182b8a72a62Sopenharmony_ci        });
183b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_ASSETS_PATH, entry -> {
184b8a72a62Sopenharmony_ci            entry.getKey().setAssetsPath(entry.getValue());
185b8a72a62Sopenharmony_ci            return true;
186b8a72a62Sopenharmony_ci        });
187b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_APK_PATH, entry -> {
188b8a72a62Sopenharmony_ci            entry.getKey().setApkPath(entry.getValue());
189b8a72a62Sopenharmony_ci            return true;
190b8a72a62Sopenharmony_ci        });
191b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_HAP_PATH, entry -> {
192b8a72a62Sopenharmony_ci            entry.getKey().setHapPath(entry.getValue());
193b8a72a62Sopenharmony_ci            return true;
194b8a72a62Sopenharmony_ci        });
195b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_APP_PATH, entry -> {
196b8a72a62Sopenharmony_ci            entry.getKey().setAppPath(entry.getValue());
197b8a72a62Sopenharmony_ci            return true;
198b8a72a62Sopenharmony_ci        });
199b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_SIGNATURE_PATH, entry -> {
200b8a72a62Sopenharmony_ci            entry.getKey().setSignaturePath(entry.getValue());
201b8a72a62Sopenharmony_ci            return true;
202b8a72a62Sopenharmony_ci        });
203b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_CERTIFICATE_PATH, entry -> {
204b8a72a62Sopenharmony_ci            entry.getKey().setCertificatePath(entry.getValue());
205b8a72a62Sopenharmony_ci            return true;
206b8a72a62Sopenharmony_ci        });
207b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_FORCE, entry -> {
208b8a72a62Sopenharmony_ci            entry.getKey().setForceRewrite(entry.getValue());
209b8a72a62Sopenharmony_ci            return true;
210b8a72a62Sopenharmony_ci        });
211b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_OUT_PATH, entry -> {
212b8a72a62Sopenharmony_ci            entry.getKey().setOutPath(entry.getValue());
213b8a72a62Sopenharmony_ci            return true;
214b8a72a62Sopenharmony_ci        });
215b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_PACK_INFO_PATH, entry -> {
216b8a72a62Sopenharmony_ci            entry.getKey().setPackInfoPath(entry.getValue());
217b8a72a62Sopenharmony_ci            return true;
218b8a72a62Sopenharmony_ci        });
219b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_ENCRYPT_PATH, entry -> {
220b8a72a62Sopenharmony_ci            entry.getKey().setEncryptPath(entry.getValue());
221b8a72a62Sopenharmony_ci            return true;
222b8a72a62Sopenharmony_ci        });
223b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_BIN_PATH, entry -> {
224b8a72a62Sopenharmony_ci            entry.getKey().setBinPath(entry.getValue());
225b8a72a62Sopenharmony_ci            return true;
226b8a72a62Sopenharmony_ci        });
227b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_JAR_PATH, entry -> {
228b8a72a62Sopenharmony_ci            entry.getKey().setJarPath(entry.getValue());
229b8a72a62Sopenharmony_ci            return true;
230b8a72a62Sopenharmony_ci        });
231b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_TXT_PATH, entry -> {
232b8a72a62Sopenharmony_ci            entry.getKey().setTxtPath(entry.getValue());
233b8a72a62Sopenharmony_ci            return true;
234b8a72a62Sopenharmony_ci        });
235b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_HAR_PATH, entry -> {
236b8a72a62Sopenharmony_ci            entry.getKey().setHarPath(entry.getValue());
237b8a72a62Sopenharmony_ci            return true;
238b8a72a62Sopenharmony_ci        });
239b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_HSP_PATH, entry -> {
240b8a72a62Sopenharmony_ci            entry.getKey().setHspPath(entry.getValue());
241b8a72a62Sopenharmony_ci            return true;
242b8a72a62Sopenharmony_ci        });
243b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_PACK_RES_PATH, entry -> {
244b8a72a62Sopenharmony_ci            entry.getKey().setPackResPath(entry.getValue());
245b8a72a62Sopenharmony_ci            return true;
246b8a72a62Sopenharmony_ci        });
247b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_UNPACKAPK, entry -> {
248b8a72a62Sopenharmony_ci            entry.getKey().setUnpackApk(entry.getValue());
249b8a72a62Sopenharmony_ci            return true;
250b8a72a62Sopenharmony_ci        });
251b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_UNPACK_CUT_ENTRY_APK, entry -> {
252b8a72a62Sopenharmony_ci            entry.getKey().setUnpackCutEntryApk(entry.getValue());
253b8a72a62Sopenharmony_ci            return true;
254b8a72a62Sopenharmony_ci        });
255b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_SHAREDLIBS_PATH, entry -> {
256b8a72a62Sopenharmony_ci            entry.getKey().setSharedLibsPath(entry.getValue());
257b8a72a62Sopenharmony_ci            return true;
258b8a72a62Sopenharmony_ci        });
259b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_ENTRYCARD_PATH, entry -> {
260b8a72a62Sopenharmony_ci            entry.getKey().setEntryCardPath(entry.getValue());
261b8a72a62Sopenharmony_ci            return true;
262b8a72a62Sopenharmony_ci        });
263b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_HAP_LIST, entry -> {
264b8a72a62Sopenharmony_ci            entry.getKey().setHapList(entry.getValue());
265b8a72a62Sopenharmony_ci            return true;
266b8a72a62Sopenharmony_ci        });
267b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_HSP_LIST, entry -> {
268b8a72a62Sopenharmony_ci            entry.getKey().setHspList(entry.getValue());
269b8a72a62Sopenharmony_ci            return true;
270b8a72a62Sopenharmony_ci        });
271b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_APP_LIST, entry -> {
272b8a72a62Sopenharmony_ci            entry.getKey().setAppList(entry.getValue());
273b8a72a62Sopenharmony_ci            return true;
274b8a72a62Sopenharmony_ci        });
275b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_DIR_LIST, entry -> {
276b8a72a62Sopenharmony_ci            entry.getKey().setDirList(entry.getValue());
277b8a72a62Sopenharmony_ci            return true;
278b8a72a62Sopenharmony_ci        });
279b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_HQF_LIST, entry -> {
280b8a72a62Sopenharmony_ci            entry.getKey().setHqfList(entry.getValue());
281b8a72a62Sopenharmony_ci            return true;
282b8a72a62Sopenharmony_ci        });
283b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_APPQF_PATH, entry -> {
284b8a72a62Sopenharmony_ci            entry.getKey().setAPPQFPath(entry.getValue());
285b8a72a62Sopenharmony_ci            return true;
286b8a72a62Sopenharmony_ci        });
287b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_AN_PATH, entry -> {
288b8a72a62Sopenharmony_ci            entry.getKey().setANPath(entry.getValue());
289b8a72a62Sopenharmony_ci            return true;
290b8a72a62Sopenharmony_ci        });
291b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_AP_PATH, entry -> {
292b8a72a62Sopenharmony_ci            entry.getKey().setAPPath(entry.getValue());
293b8a72a62Sopenharmony_ci            return true;
294b8a72a62Sopenharmony_ci        });
295b8a72a62Sopenharmony_ci        commandFuncs.put(MAIN_MODULE_LIMIT, entry -> {
296b8a72a62Sopenharmony_ci            entry.getKey().setMainModuleLimit(entry.getValue());
297b8a72a62Sopenharmony_ci            return true;
298b8a72a62Sopenharmony_ci        });
299b8a72a62Sopenharmony_ci        commandFuncs.put(NORMAL_MODULE_LIMIT, entry -> {
300b8a72a62Sopenharmony_ci            entry.getKey().setNormalModuleLimit(entry.getValue());
301b8a72a62Sopenharmony_ci            return true;
302b8a72a62Sopenharmony_ci        });
303b8a72a62Sopenharmony_ci        commandFuncs.put(TOTAL_LIMIT, entry -> {
304b8a72a62Sopenharmony_ci            entry.getKey().setTotalLimit(entry.getValue());
305b8a72a62Sopenharmony_ci            return true;
306b8a72a62Sopenharmony_ci        });
307b8a72a62Sopenharmony_ci        commandFuncs.put(VERSION_CODE, entry -> {
308b8a72a62Sopenharmony_ci            try {
309b8a72a62Sopenharmony_ci                entry.getKey().setVersionCode(Integer.parseInt(entry.getValue()));
310b8a72a62Sopenharmony_ci            } catch (NumberFormatException ignored) {
311b8a72a62Sopenharmony_ci                LOG.error("CommandParser::--version-code value must be number.");
312b8a72a62Sopenharmony_ci                return false;
313b8a72a62Sopenharmony_ci            }
314b8a72a62Sopenharmony_ci            return true;
315b8a72a62Sopenharmony_ci        });
316b8a72a62Sopenharmony_ci        commandFuncs.put(VERSION_NAME, entry -> {
317b8a72a62Sopenharmony_ci            entry.getKey().setVersionName(entry.getValue());
318b8a72a62Sopenharmony_ci            return true;
319b8a72a62Sopenharmony_ci        });
320b8a72a62Sopenharmony_ci        commandFuncs.put(INPUT_LIST, entry -> {
321b8a72a62Sopenharmony_ci            entry.getKey().setInputList(entry.getValue());
322b8a72a62Sopenharmony_ci            return true;
323b8a72a62Sopenharmony_ci        });
324b8a72a62Sopenharmony_ci        commandFuncs.put(INPUT, entry -> {
325b8a72a62Sopenharmony_ci            entry.getKey().setInput(entry.getValue());
326b8a72a62Sopenharmony_ci            return true;
327b8a72a62Sopenharmony_ci        });
328b8a72a62Sopenharmony_ci        commandFuncs.put(STAT_DUPLICATE, entry -> {
329b8a72a62Sopenharmony_ci            if (Boolean.TRUE.toString().equals(entry.getValue()) || Boolean.FALSE.toString().equals(entry.getValue())) {
330b8a72a62Sopenharmony_ci                entry.getKey().setStatDuplicate(Boolean.parseBoolean(entry.getValue()));
331b8a72a62Sopenharmony_ci                return true;
332b8a72a62Sopenharmony_ci            } else {
333b8a72a62Sopenharmony_ci                LOG.error(PARSER_STAT_DUPLICATE_ERROR);
334b8a72a62Sopenharmony_ci                return false;
335b8a72a62Sopenharmony_ci            }
336b8a72a62Sopenharmony_ci        });
337b8a72a62Sopenharmony_ci        commandFuncs.put(STAT_SUFFIX, entry -> {
338b8a72a62Sopenharmony_ci            if (Boolean.TRUE.toString().equals(entry.getValue()) || Boolean.FALSE.toString().equals(entry.getValue())) {
339b8a72a62Sopenharmony_ci                entry.getKey().setStatSuffix(Boolean.parseBoolean(entry.getValue()));
340b8a72a62Sopenharmony_ci                return true;
341b8a72a62Sopenharmony_ci            } else {
342b8a72a62Sopenharmony_ci                LOG.error(PARSER_STAT_SUFFIX_ERROR);
343b8a72a62Sopenharmony_ci                return false;
344b8a72a62Sopenharmony_ci            }
345b8a72a62Sopenharmony_ci        });
346b8a72a62Sopenharmony_ci        commandFuncs.put(STAT_FILE_SIZE, entry -> {
347b8a72a62Sopenharmony_ci            entry.getKey().setStatFileSize(entry.getValue());
348b8a72a62Sopenharmony_ci            return true;
349b8a72a62Sopenharmony_ci        });
350b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_COMPRESS_LEVEL, entry -> {
351b8a72a62Sopenharmony_ci            String level = entry.getValue();
352b8a72a62Sopenharmony_ci            try {
353b8a72a62Sopenharmony_ci                int compressLevel = Integer.parseInt(level);
354b8a72a62Sopenharmony_ci                if (compressLevel < 1 || compressLevel > 9) {
355b8a72a62Sopenharmony_ci                    LOG.error("CommandParser::--compress-level value must be number between 1-9");
356b8a72a62Sopenharmony_ci                    return false;
357b8a72a62Sopenharmony_ci                } else {
358b8a72a62Sopenharmony_ci                    entry.getKey().setCompressLevel(compressLevel);
359b8a72a62Sopenharmony_ci                    return true;
360b8a72a62Sopenharmony_ci                }
361b8a72a62Sopenharmony_ci            } catch (NumberFormatException ex) {
362b8a72a62Sopenharmony_ci                LOG.error("CommandParser::--compress-level value must be number between 1-9");
363b8a72a62Sopenharmony_ci                return false;
364b8a72a62Sopenharmony_ci            }
365b8a72a62Sopenharmony_ci        });
366b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_PKG_CONTEXT_PATH, entry -> {
367b8a72a62Sopenharmony_ci            entry.getKey().setPkgContextPath(entry.getValue());
368b8a72a62Sopenharmony_ci            return true;
369b8a72a62Sopenharmony_ci        });
370b8a72a62Sopenharmony_ci        commandFuncs.put(CMD_BUNDLE_NAME, entry -> {
371b8a72a62Sopenharmony_ci            entry.getKey().setBundleName(entry.getValue());
372b8a72a62Sopenharmony_ci            return true;
373b8a72a62Sopenharmony_ci        });
374b8a72a62Sopenharmony_ci    }
375b8a72a62Sopenharmony_ci
376b8a72a62Sopenharmony_ci
377b8a72a62Sopenharmony_ci    /**
378b8a72a62Sopenharmony_ci     * judge args is null and enter parser.
379b8a72a62Sopenharmony_ci     *
380b8a72a62Sopenharmony_ci     * @param utility common data
381b8a72a62Sopenharmony_ci     * @param args command line
382b8a72a62Sopenharmony_ci     * @return commandParser if input valid
383b8a72a62Sopenharmony_ci     */
384b8a72a62Sopenharmony_ci    public static boolean commandParser(Utility utility, String[] args) {
385b8a72a62Sopenharmony_ci        if (args == null) {
386b8a72a62Sopenharmony_ci            LOG.error("CommandParser::commandParser args is null!");
387b8a72a62Sopenharmony_ci            return false;
388b8a72a62Sopenharmony_ci        }
389b8a72a62Sopenharmony_ci        for (int i = 0; i < args.length - 1; ++i) {
390b8a72a62Sopenharmony_ci            String key = args[i];
391b8a72a62Sopenharmony_ci            String value = args[i + 1];
392b8a72a62Sopenharmony_ci            Map.Entry<Utility, String> entry = new AbstractMap.SimpleEntry<>(utility, value);
393b8a72a62Sopenharmony_ci            if (commandFuncs.get(key) != null) {
394b8a72a62Sopenharmony_ci                commandFuncs.get(key).apply(entry);
395b8a72a62Sopenharmony_ci                ++i;
396b8a72a62Sopenharmony_ci            } else if (CMD_PARSE_MODE.equals(key)) {
397b8a72a62Sopenharmony_ci                if (i + PARSE_MODE_VALUE_LENGTH >= args.length) {
398b8a72a62Sopenharmony_ci                    LOG.error("input wrong number value for --p command");
399b8a72a62Sopenharmony_ci                    return false;
400b8a72a62Sopenharmony_ci                }
401b8a72a62Sopenharmony_ci                utility.setParseMode(args[i + 1]);
402b8a72a62Sopenharmony_ci                if (PARSE_MODE_HAPLIST.equals(utility.getParseMode())) {
403b8a72a62Sopenharmony_ci                    utility.setDeviceType(args[i + PARSE_MODE_VALUE_LENGTH]);
404b8a72a62Sopenharmony_ci                } else if (PARSE_MODE_HAPINFO.equals(utility.getParseMode())) {
405b8a72a62Sopenharmony_ci                    utility.setHapName(args[i + PARSE_MODE_VALUE_LENGTH]);
406b8a72a62Sopenharmony_ci                }
407b8a72a62Sopenharmony_ci                i += PARSE_MODE_VALUE_LENGTH;
408b8a72a62Sopenharmony_ci            } else {
409b8a72a62Sopenharmony_ci                LOG.warning(key + " is invalid!");
410b8a72a62Sopenharmony_ci            }
411b8a72a62Sopenharmony_ci        }
412b8a72a62Sopenharmony_ci        return true;
413b8a72a62Sopenharmony_ci    }
414b8a72a62Sopenharmony_ci}
415