xref: /ide/tools/previewer/util/CommandParser.cpp (revision 7c804472)
17c804472Sopenharmony_ci/*
27c804472Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
47c804472Sopenharmony_ci * you may not use this file except in compliance with the License.
57c804472Sopenharmony_ci * You may obtain a copy of the License at
67c804472Sopenharmony_ci *
77c804472Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
87c804472Sopenharmony_ci *
97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127c804472Sopenharmony_ci * See the License for the specific language governing permissions and
137c804472Sopenharmony_ci * limitations under the License.
147c804472Sopenharmony_ci */
157c804472Sopenharmony_ci
167c804472Sopenharmony_ci#include "CommandParser.h"
177c804472Sopenharmony_ci#include <cstring>
187c804472Sopenharmony_ci#include <algorithm>
197c804472Sopenharmony_ci#include <cstdlib>
207c804472Sopenharmony_ci#include <regex>
217c804472Sopenharmony_ci#include "FileSystem.h"
227c804472Sopenharmony_ci#include "PreviewerEngineLog.h"
237c804472Sopenharmony_ci#include "TraceTool.h"
247c804472Sopenharmony_ci
257c804472Sopenharmony_ciCommandParser* CommandParser::example = nullptr;
267c804472Sopenharmony_ciCommandParser::CommandParser()
277c804472Sopenharmony_ci    : isSendJSHeap(true),
287c804472Sopenharmony_ci      orignalResolutionWidth(0),
297c804472Sopenharmony_ci      orignalResolutionHeight(0),
307c804472Sopenharmony_ci      compressionResolutionWidth(0),
317c804472Sopenharmony_ci      compressionResolutionHeight(0),
327c804472Sopenharmony_ci      jsHeapSize(MAX_JSHEAPSIZE),
337c804472Sopenharmony_ci      deviceType("liteWearable"),
347c804472Sopenharmony_ci      screenShape("circle"),
357c804472Sopenharmony_ci      appName("undefined"),
367c804472Sopenharmony_ci      configPath(""),
377c804472Sopenharmony_ci      isRegionRefresh(false),
387c804472Sopenharmony_ci      isCardDisplay(false),
397c804472Sopenharmony_ci      projectID(""),
407c804472Sopenharmony_ci      screenMode(CommandParser::ScreenMode::DYNAMIC),
417c804472Sopenharmony_ci      configChanges(""),
427c804472Sopenharmony_ci      appResourcePath(""),
437c804472Sopenharmony_ci      projectModel("FA"),
447c804472Sopenharmony_ci      pages("main_pages"),
457c804472Sopenharmony_ci      containerSdkPath(""),
467c804472Sopenharmony_ci      isComponentMode(false),
477c804472Sopenharmony_ci      abilityPath(""),
487c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED
497c804472Sopenharmony_ci      componentTestConfig(""),
507c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED
517c804472Sopenharmony_ci      staticCard(false)
527c804472Sopenharmony_ci{
537c804472Sopenharmony_ci    Register("-j", 1, "Launch the js app in <directory>.");
547c804472Sopenharmony_ci    Register("-n", 1, "Set the js app name show on <window title>.");
557c804472Sopenharmony_ci    Register("-d", 0, "Run in debug mode and start debug server.");
567c804472Sopenharmony_ci    Register("-p", 1, "Config debug server to listen <port>.");
577c804472Sopenharmony_ci    Register("-s", 1, "Local socket name <socket-name> for command line interface.");
587c804472Sopenharmony_ci    Register("-v", 0, "Print the periviewer engine version.");
597c804472Sopenharmony_ci    Register("-h", 0, "Print the usage help.");
607c804472Sopenharmony_ci    Register("-or", 2, "Original resolution <width> <height>"); // 2 arguments
617c804472Sopenharmony_ci    Register("-cr", 2, "Compression resolution <width> <height>"); // 2 arguments
627c804472Sopenharmony_ci    Register("-f", 1, "config path <path>");
637c804472Sopenharmony_ci    Register("-hs", 1, "JS Heap <size>");
647c804472Sopenharmony_ci    Register("-hf", 1, "JS Send Heap <flag>");
657c804472Sopenharmony_ci    Register("-shape", 1, "Screen shape <shape>");
667c804472Sopenharmony_ci    Register("-device", 1, "Device type <type>");
677c804472Sopenharmony_ci    Register("-url", 1, "temp url");
687c804472Sopenharmony_ci    Register("-refresh", 1, "Screen <refresh mode>, support region and full");
697c804472Sopenharmony_ci    Register("-card", 1, "Controls the display <type> to switch between the app and card.");
707c804472Sopenharmony_ci    Register("-projectID", 1, "the ID of current project.");
717c804472Sopenharmony_ci    Register("-ts", 1, "Trace socket name");
727c804472Sopenharmony_ci    Register("-cm", 1, "Set colormode for the theme.");
737c804472Sopenharmony_ci    Register("-o", 1, "Set orientation for the display.");
747c804472Sopenharmony_ci    Register("-lws", 1, "Listening port of WebSocket");
757c804472Sopenharmony_ci    Register("-av", 1, "Set ace version.");
767c804472Sopenharmony_ci    Register("-l", 1, "Set language for startParam.");
777c804472Sopenharmony_ci    Register("-sd", 1, "Set screenDensity for Previewer.");
787c804472Sopenharmony_ci    Register("-sm", 1, "Set Screen picture transport mode, support dynamic and static");
797c804472Sopenharmony_ci    Register("-cc", 1, "Set Resource configChanges.");
807c804472Sopenharmony_ci    Register("-arp", 1, "Set App ResourcePath.");
817c804472Sopenharmony_ci    Register("-fs", 1, "Select Fonts sources.");
827c804472Sopenharmony_ci    Register("-pm", 1, "Set project model type.");
837c804472Sopenharmony_ci    Register("-pages", 1, "Set project's router config file path.");
847c804472Sopenharmony_ci    Register("-hsp", 1, "Set container sdk path.");
857c804472Sopenharmony_ci    Register("-cpm", 1, "Set previewer start mode.");
867c804472Sopenharmony_ci    Register("-abp", 1, "Set abilityPath for debug.");
877c804472Sopenharmony_ci    Register("-abn", 1, "Set abilityName for debug.");
887c804472Sopenharmony_ci    Register("-staticCard", 1, "Set card mode.");
897c804472Sopenharmony_ci    Register("-foldable", 1, "Set foldable for Previewer.");
907c804472Sopenharmony_ci    Register("-foldStatus", 1, "Set fold status for Previewer.");
917c804472Sopenharmony_ci    Register("-fr", 2, "Fold resolution <width> <height>"); // 2 arguments
927c804472Sopenharmony_ci    Register("-ljPath", 1, "Set loader.json path for Previewer");
937c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED
947c804472Sopenharmony_ci    Register("-componentTest", 1, "Set component test config");
957c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED
967c804472Sopenharmony_ci}
977c804472Sopenharmony_ci
987c804472Sopenharmony_ciCommandParser& CommandParser::GetInstance()
997c804472Sopenharmony_ci{
1007c804472Sopenharmony_ci    static CommandParser instance;
1017c804472Sopenharmony_ci    return instance;
1027c804472Sopenharmony_ci}
1037c804472Sopenharmony_ci
1047c804472Sopenharmony_ci/*
1057c804472Sopenharmony_ci * Parse user input and check parameter validity
1067c804472Sopenharmony_ci */
1077c804472Sopenharmony_cibool CommandParser::ProcessCommand(std::vector<std::string> strs)
1087c804472Sopenharmony_ci{
1097c804472Sopenharmony_ci    ProcessingCommand(strs);
1107c804472Sopenharmony_ci
1117c804472Sopenharmony_ci    if (IsSet("v")) {
1127c804472Sopenharmony_ci        ELOG("ProcessCommand Set -v!");
1137c804472Sopenharmony_ci        return false;
1147c804472Sopenharmony_ci    }
1157c804472Sopenharmony_ci
1167c804472Sopenharmony_ci    if (IsSet("h")) {
1177c804472Sopenharmony_ci        ELOG("ProcessCommand Set -h!");
1187c804472Sopenharmony_ci        ELOG(HelpText().c_str());
1197c804472Sopenharmony_ci        return false;
1207c804472Sopenharmony_ci    }
1217c804472Sopenharmony_ci
1227c804472Sopenharmony_ci    return true;
1237c804472Sopenharmony_ci}
1247c804472Sopenharmony_ci
1257c804472Sopenharmony_cibool CommandParser::IsCommandValid()
1267c804472Sopenharmony_ci{
1277c804472Sopenharmony_ci    bool partRet = IsDebugPortValid() && IsAppPathValid() && IsAppNameValid() && IsResolutionValid();
1287c804472Sopenharmony_ci    partRet = partRet && IsConfigPathValid() && IsJsHeapValid() && IsJsHeapFlagValid() && IsScreenShapeValid();
1297c804472Sopenharmony_ci    partRet = partRet && IsDeviceValid() && IsUrlValid() && IsRefreshValid() && IsCardValid() && IsProjectIDValid();
1307c804472Sopenharmony_ci    partRet = partRet && IsColorModeValid() && IsOrientationValid() && IsWebSocketPortValid() && IsAceVersionValid();
1317c804472Sopenharmony_ci    partRet = partRet && IsScreenModeValid() && IsAppResourcePathValid() && IsLoaderJsonPathValid();
1327c804472Sopenharmony_ci    partRet = partRet && IsProjectModelValid() && IsPagesValid() && IsContainerSdkPathValid();
1337c804472Sopenharmony_ci    partRet = partRet && IsComponentModeValid() && IsAbilityPathValid() && IsStaticCardValid();
1347c804472Sopenharmony_ci    partRet = partRet && IsFoldableValid() && IsFoldStatusValid() && IsFoldResolutionValid();
1357c804472Sopenharmony_ci    partRet = partRet && IsAbilityNameValid() && IsLanguageValid() && IsTracePipeNameValid();
1367c804472Sopenharmony_ci    partRet = partRet && IsLocalSocketNameValid() && IsConfigChangesValid() && IsScreenDensityValid();
1377c804472Sopenharmony_ci    if (partRet) {
1387c804472Sopenharmony_ci        return true;
1397c804472Sopenharmony_ci    }
1407c804472Sopenharmony_ci    ELOG(errorInfo.c_str());
1417c804472Sopenharmony_ci    ILOG(HelpText().c_str());
1427c804472Sopenharmony_ci    TraceTool::GetInstance().HandleTrace("Invalid startup parameters");
1437c804472Sopenharmony_ci    return false;
1447c804472Sopenharmony_ci}
1457c804472Sopenharmony_ci
1467c804472Sopenharmony_cibool CommandParser::IsSet(std::string key)
1477c804472Sopenharmony_ci{
1487c804472Sopenharmony_ci    if (argsMap.find(std::string("-") + key) == argsMap.end()) {
1497c804472Sopenharmony_ci        return false;
1507c804472Sopenharmony_ci    }
1517c804472Sopenharmony_ci    return true;
1527c804472Sopenharmony_ci}
1537c804472Sopenharmony_ci
1547c804472Sopenharmony_cistd::string CommandParser::Value(std::string key)
1557c804472Sopenharmony_ci{
1567c804472Sopenharmony_ci    auto args = argsMap[std::string("-") + key];
1577c804472Sopenharmony_ci    if (args.size() > 0) {
1587c804472Sopenharmony_ci        return args[0];
1597c804472Sopenharmony_ci    }
1607c804472Sopenharmony_ci    return std::string();
1617c804472Sopenharmony_ci}
1627c804472Sopenharmony_ci
1637c804472Sopenharmony_cistd::vector<std::string> CommandParser::Values(std::string key)
1647c804472Sopenharmony_ci{
1657c804472Sopenharmony_ci    if (argsMap.find(key) == argsMap.end()) {
1667c804472Sopenharmony_ci        return std::vector<std::string>();
1677c804472Sopenharmony_ci    }
1687c804472Sopenharmony_ci    std::vector<std::string> args = argsMap[key];
1697c804472Sopenharmony_ci    return args;
1707c804472Sopenharmony_ci}
1717c804472Sopenharmony_ci
1727c804472Sopenharmony_civoid CommandParser::Register(std::string key, uint32_t argc, std::string help)
1737c804472Sopenharmony_ci{
1747c804472Sopenharmony_ci    regsArgsCountMap[key] = argc;
1757c804472Sopenharmony_ci    regsHelpMap[key] = help;
1767c804472Sopenharmony_ci}
1777c804472Sopenharmony_ci
1787c804472Sopenharmony_cibool CommandParser::IsResolutionValid(int32_t resolution) const
1797c804472Sopenharmony_ci{
1807c804472Sopenharmony_ci    if (resolution >= MIN_RESOLUTION && resolution <= MAX_RESOLUTION) {
1817c804472Sopenharmony_ci        return true;
1827c804472Sopenharmony_ci    }
1837c804472Sopenharmony_ci    return false;
1847c804472Sopenharmony_ci}
1857c804472Sopenharmony_ci
1867c804472Sopenharmony_cistd::string CommandParser::GetDeviceType() const
1877c804472Sopenharmony_ci{
1887c804472Sopenharmony_ci    return deviceType;
1897c804472Sopenharmony_ci}
1907c804472Sopenharmony_ci
1917c804472Sopenharmony_cibool CommandParser::IsRegionRefresh() const
1927c804472Sopenharmony_ci{
1937c804472Sopenharmony_ci    return isRegionRefresh;
1947c804472Sopenharmony_ci}
1957c804472Sopenharmony_ci
1967c804472Sopenharmony_cibool CommandParser::IsCardDisplay() const
1977c804472Sopenharmony_ci{
1987c804472Sopenharmony_ci    return isCardDisplay;
1997c804472Sopenharmony_ci}
2007c804472Sopenharmony_ci
2017c804472Sopenharmony_cistd::string CommandParser::GetConfigPath() const
2027c804472Sopenharmony_ci{
2037c804472Sopenharmony_ci    return configPath;
2047c804472Sopenharmony_ci}
2057c804472Sopenharmony_ci
2067c804472Sopenharmony_cistd::string CommandParser::GetProjectID() const
2077c804472Sopenharmony_ci{
2087c804472Sopenharmony_ci    return projectID;
2097c804472Sopenharmony_ci}
2107c804472Sopenharmony_ci
2117c804472Sopenharmony_cistd::string CommandParser::GetAppResourcePath() const
2127c804472Sopenharmony_ci{
2137c804472Sopenharmony_ci    return appResourcePath;
2147c804472Sopenharmony_ci}
2157c804472Sopenharmony_ci
2167c804472Sopenharmony_cistd::string CommandParser::GetScreenShape() const
2177c804472Sopenharmony_ci{
2187c804472Sopenharmony_ci    return screenShape;
2197c804472Sopenharmony_ci}
2207c804472Sopenharmony_ci
2217c804472Sopenharmony_cistd::string CommandParser::GetProjectModel() const
2227c804472Sopenharmony_ci{
2237c804472Sopenharmony_ci    return projectModel;
2247c804472Sopenharmony_ci}
2257c804472Sopenharmony_ci
2267c804472Sopenharmony_cistd::string CommandParser::GetPages() const
2277c804472Sopenharmony_ci{
2287c804472Sopenharmony_ci    return pages;
2297c804472Sopenharmony_ci}
2307c804472Sopenharmony_ci
2317c804472Sopenharmony_cistd::string CommandParser::GetContainerSdkPath() const
2327c804472Sopenharmony_ci{
2337c804472Sopenharmony_ci    return containerSdkPath;
2347c804472Sopenharmony_ci}
2357c804472Sopenharmony_ci
2367c804472Sopenharmony_ciCommandParser::ScreenMode CommandParser::GetScreenMode() const
2377c804472Sopenharmony_ci{
2387c804472Sopenharmony_ci    return screenMode;
2397c804472Sopenharmony_ci}
2407c804472Sopenharmony_ci
2417c804472Sopenharmony_cistd::string CommandParser::GetConfigChanges() const
2427c804472Sopenharmony_ci{
2437c804472Sopenharmony_ci    return configChanges;
2447c804472Sopenharmony_ci}
2457c804472Sopenharmony_ci
2467c804472Sopenharmony_ciint32_t CommandParser::GetOrignalResolutionWidth() const
2477c804472Sopenharmony_ci{
2487c804472Sopenharmony_ci    return orignalResolutionWidth;
2497c804472Sopenharmony_ci}
2507c804472Sopenharmony_ci
2517c804472Sopenharmony_ciint32_t CommandParser::GetOrignalResolutionHeight() const
2527c804472Sopenharmony_ci{
2537c804472Sopenharmony_ci    return orignalResolutionHeight;
2547c804472Sopenharmony_ci}
2557c804472Sopenharmony_ci
2567c804472Sopenharmony_ciint32_t CommandParser::GetCompressionResolutionWidth() const
2577c804472Sopenharmony_ci{
2587c804472Sopenharmony_ci    return compressionResolutionWidth;
2597c804472Sopenharmony_ci}
2607c804472Sopenharmony_ci
2617c804472Sopenharmony_ciint32_t CommandParser::GetCompressionResolutionHeight() const
2627c804472Sopenharmony_ci{
2637c804472Sopenharmony_ci    return compressionResolutionHeight;
2647c804472Sopenharmony_ci}
2657c804472Sopenharmony_ci
2667c804472Sopenharmony_ciuint32_t CommandParser::GetJsHeapSize() const
2677c804472Sopenharmony_ci{
2687c804472Sopenharmony_ci    return jsHeapSize;
2697c804472Sopenharmony_ci}
2707c804472Sopenharmony_ci
2717c804472Sopenharmony_cistd::string CommandParser::GetAppName() const
2727c804472Sopenharmony_ci{
2737c804472Sopenharmony_ci    return appName;
2747c804472Sopenharmony_ci}
2757c804472Sopenharmony_ci
2767c804472Sopenharmony_cibool CommandParser::IsSendJSHeap() const
2777c804472Sopenharmony_ci{
2787c804472Sopenharmony_ci    return isSendJSHeap;
2797c804472Sopenharmony_ci}
2807c804472Sopenharmony_ci
2817c804472Sopenharmony_cibool CommandParser::IsComponentMode() const
2827c804472Sopenharmony_ci{
2837c804472Sopenharmony_ci    return isComponentMode;
2847c804472Sopenharmony_ci}
2857c804472Sopenharmony_ci
2867c804472Sopenharmony_cistd::string CommandParser::GetAbilityPath() const
2877c804472Sopenharmony_ci{
2887c804472Sopenharmony_ci    return abilityPath;
2897c804472Sopenharmony_ci}
2907c804472Sopenharmony_ci
2917c804472Sopenharmony_cistd::string CommandParser::GetAbilityName() const
2927c804472Sopenharmony_ci{
2937c804472Sopenharmony_ci    return abilityName;
2947c804472Sopenharmony_ci}
2957c804472Sopenharmony_ci
2967c804472Sopenharmony_cibool CommandParser::IsStaticCard() const
2977c804472Sopenharmony_ci{
2987c804472Sopenharmony_ci    return staticCard;
2997c804472Sopenharmony_ci}
3007c804472Sopenharmony_ci
3017c804472Sopenharmony_cibool CommandParser::IsDebugPortValid()
3027c804472Sopenharmony_ci{
3037c804472Sopenharmony_ci    if (IsSet("p")) {
3047c804472Sopenharmony_ci        if (CheckParamInvalidity(Value("p"), true)) {
3057c804472Sopenharmony_ci            errorInfo = "Launch -p parameters is not match regex.";
3067c804472Sopenharmony_ci            return false;
3077c804472Sopenharmony_ci        }
3087c804472Sopenharmony_ci        int port = atoi(Value("p").c_str());
3097c804472Sopenharmony_ci        if (port < MIN_PORT || port > MAX_PORT) {
3107c804472Sopenharmony_ci            errorInfo =
3117c804472Sopenharmony_ci                std::string("Debug server port out of range: " + std::to_string(MIN_PORT) + "-" +
3127c804472Sopenharmony_ci                std::to_string(MAX_PORT) + ".");
3137c804472Sopenharmony_ci            ELOG("Launch -p parameters abnormal!");
3147c804472Sopenharmony_ci            return false;
3157c804472Sopenharmony_ci        }
3167c804472Sopenharmony_ci    }
3177c804472Sopenharmony_ci    ILOG("CommandParser debug port: %s", Value("p").c_str());
3187c804472Sopenharmony_ci    return true;
3197c804472Sopenharmony_ci}
3207c804472Sopenharmony_ci
3217c804472Sopenharmony_cibool CommandParser::IsAppPathValid()
3227c804472Sopenharmony_ci{
3237c804472Sopenharmony_ci    if (!IsSet("j")) {
3247c804472Sopenharmony_ci        errorInfo = std::string("No app path specified.");
3257c804472Sopenharmony_ci        ELOG("Launch -j parameters abnormal!");
3267c804472Sopenharmony_ci        return false;
3277c804472Sopenharmony_ci    }
3287c804472Sopenharmony_ci    std::string path = Value("j");
3297c804472Sopenharmony_ci    if (!FileSystem::IsDirectoryExists(path)) {
3307c804472Sopenharmony_ci        errorInfo = std::string("Js app path not exist.");
3317c804472Sopenharmony_ci        ELOG("Launch -j parameters abnormal!");
3327c804472Sopenharmony_ci        return false;
3337c804472Sopenharmony_ci    }
3347c804472Sopenharmony_ci
3357c804472Sopenharmony_ci    return true;
3367c804472Sopenharmony_ci}
3377c804472Sopenharmony_ci
3387c804472Sopenharmony_cibool CommandParser::IsAppNameValid()
3397c804472Sopenharmony_ci{
3407c804472Sopenharmony_ci    if (IsSet("n")) {
3417c804472Sopenharmony_ci        if (CheckParamInvalidity(Value("n"), false)) {
3427c804472Sopenharmony_ci            errorInfo = "Launch -n parameters is not match regex.";
3437c804472Sopenharmony_ci            return false;
3447c804472Sopenharmony_ci        }
3457c804472Sopenharmony_ci        size_t size = Value("n").size();
3467c804472Sopenharmony_ci        if (size > MAX_NAME_LENGTH) {
3477c804472Sopenharmony_ci            errorInfo = std::string("Js app name it too long, max: " + std::to_string(MAX_NAME_LENGTH) + ".");
3487c804472Sopenharmony_ci            return false;
3497c804472Sopenharmony_ci        }
3507c804472Sopenharmony_ci        appName = Value("n");
3517c804472Sopenharmony_ci    }
3527c804472Sopenharmony_ci    ILOG("CommandParser app name: %s", appName.c_str());
3537c804472Sopenharmony_ci    return true;
3547c804472Sopenharmony_ci}
3557c804472Sopenharmony_ci
3567c804472Sopenharmony_cibool CommandParser::IsResolutionValid()
3577c804472Sopenharmony_ci{
3587c804472Sopenharmony_ci    if (IsSet("or") && IsSet("cr")) {
3597c804472Sopenharmony_ci        if (IsResolutionArgValid(std::string("-or")) && IsResolutionArgValid(std::string("-cr"))) {
3607c804472Sopenharmony_ci            orignalResolutionWidth = atoi(Values("-or")[0].c_str());
3617c804472Sopenharmony_ci            orignalResolutionHeight = atoi(Values("-or")[1].c_str());
3627c804472Sopenharmony_ci            compressionResolutionWidth = atoi(Values("-cr")[0].c_str());
3637c804472Sopenharmony_ci            compressionResolutionHeight = atoi(Values("-cr")[1].c_str());
3647c804472Sopenharmony_ci            ILOG("CommandParser resolution: %d %d %d %d", orignalResolutionWidth, orignalResolutionHeight,
3657c804472Sopenharmony_ci                 compressionResolutionWidth, compressionResolutionHeight);
3667c804472Sopenharmony_ci            return true;
3677c804472Sopenharmony_ci        }
3687c804472Sopenharmony_ci        ELOG("Launch -cr/-or parameters abnormal!");
3697c804472Sopenharmony_ci        return false;
3707c804472Sopenharmony_ci    }
3717c804472Sopenharmony_ci    ELOG("Launch -cr/-or parameters abnormal!");
3727c804472Sopenharmony_ci    errorInfo = std::string("Origin resolution and compress resolution must be setted.");
3737c804472Sopenharmony_ci    return false;
3747c804472Sopenharmony_ci}
3757c804472Sopenharmony_ci
3767c804472Sopenharmony_cibool CommandParser::IsJsHeapValid()
3777c804472Sopenharmony_ci{
3787c804472Sopenharmony_ci    if (IsSet("hs")) {
3797c804472Sopenharmony_ci        if (CheckParamInvalidity(Value("hs"), true)) {
3807c804472Sopenharmony_ci            errorInfo = "Launch -hs parameters is not match regex.";
3817c804472Sopenharmony_ci            return false;
3827c804472Sopenharmony_ci        }
3837c804472Sopenharmony_ci        int size = atoi(Value("hs").c_str());
3847c804472Sopenharmony_ci        if (size < MIN_JSHEAPSIZE || size > MAX_JSHEAPSIZE) {
3857c804472Sopenharmony_ci            errorInfo = std::string("JS heap size out of range: " + std::to_string(MIN_JSHEAPSIZE) + "-" +
3867c804472Sopenharmony_ci                std::to_string(MAX_JSHEAPSIZE) + ".");
3877c804472Sopenharmony_ci            ELOG("Launch -hs parameters abnormal!");
3887c804472Sopenharmony_ci            return false;
3897c804472Sopenharmony_ci        }
3907c804472Sopenharmony_ci        jsHeapSize = static_cast<uint32_t>(size);
3917c804472Sopenharmony_ci    }
3927c804472Sopenharmony_ci    ILOG("CommandParser js heap: %d", jsHeapSize);
3937c804472Sopenharmony_ci    return true;
3947c804472Sopenharmony_ci}
3957c804472Sopenharmony_ci
3967c804472Sopenharmony_cibool CommandParser::IsJsHeapFlagValid()
3977c804472Sopenharmony_ci{
3987c804472Sopenharmony_ci    if (IsSet("hf")) {
3997c804472Sopenharmony_ci        std::string flag = Value("hf");
4007c804472Sopenharmony_ci        if (flag != "true" && flag != "false") {
4017c804472Sopenharmony_ci            errorInfo = std::string("JS heap flag suported: true or false");
4027c804472Sopenharmony_ci            ELOG("Launch -hs parameters abnormal!");
4037c804472Sopenharmony_ci            return false;
4047c804472Sopenharmony_ci        }
4057c804472Sopenharmony_ci        isSendJSHeap = (flag == "true");
4067c804472Sopenharmony_ci    }
4077c804472Sopenharmony_ci    ILOG("CommandParser is send JS heap: %d", isSendJSHeap);
4087c804472Sopenharmony_ci    return true;
4097c804472Sopenharmony_ci}
4107c804472Sopenharmony_ci
4117c804472Sopenharmony_cibool CommandParser::IsScreenShapeValid()
4127c804472Sopenharmony_ci{
4137c804472Sopenharmony_ci    if (IsSet("shape")) {
4147c804472Sopenharmony_ci        std::string shape = Value("shape");
4157c804472Sopenharmony_ci        if (shape != "rect" && shape != "circle") {
4167c804472Sopenharmony_ci            errorInfo = std::string("Screen shape suported: rect or circle");
4177c804472Sopenharmony_ci            ELOG("The current device does not support, please upgrade the SDK!");
4187c804472Sopenharmony_ci            return false;
4197c804472Sopenharmony_ci        }
4207c804472Sopenharmony_ci        screenShape = shape;
4217c804472Sopenharmony_ci    }
4227c804472Sopenharmony_ci    ILOG("CommandParser screen shape: %s", screenShape.c_str());
4237c804472Sopenharmony_ci    return true;
4247c804472Sopenharmony_ci}
4257c804472Sopenharmony_ci
4267c804472Sopenharmony_cibool CommandParser::IsDeviceValid()
4277c804472Sopenharmony_ci{
4287c804472Sopenharmony_ci    if (IsSet("device")) {
4297c804472Sopenharmony_ci        auto iter = find(supportedDevices.begin(), supportedDevices.end(), Value("device"));
4307c804472Sopenharmony_ci        if (iter == supportedDevices.end()) {
4317c804472Sopenharmony_ci            errorInfo += std::string("Device type unsupport, please upgrade the Previewer SDK!");
4327c804472Sopenharmony_ci            ELOG("Device type unsupport!");
4337c804472Sopenharmony_ci            return false;
4347c804472Sopenharmony_ci        }
4357c804472Sopenharmony_ci    }
4367c804472Sopenharmony_ci    deviceType = Value("device");
4377c804472Sopenharmony_ci    ILOG("CommandParser device: %s", deviceType.c_str());
4387c804472Sopenharmony_ci    return true;
4397c804472Sopenharmony_ci}
4407c804472Sopenharmony_ci
4417c804472Sopenharmony_cibool CommandParser::IsUrlValid()
4427c804472Sopenharmony_ci{
4437c804472Sopenharmony_ci    urlPath = Value("url");
4447c804472Sopenharmony_ci    if (urlPath.empty()) {
4457c804472Sopenharmony_ci        errorInfo = "Launch -url parameters is empty.";
4467c804472Sopenharmony_ci        return false;
4477c804472Sopenharmony_ci    }
4487c804472Sopenharmony_ci    ILOG("CommandParser url: %s", urlPath.c_str());
4497c804472Sopenharmony_ci    return true;
4507c804472Sopenharmony_ci}
4517c804472Sopenharmony_ci
4527c804472Sopenharmony_cibool CommandParser::IsConfigPathValid()
4537c804472Sopenharmony_ci{
4547c804472Sopenharmony_ci    if (!IsSet("f")) {
4557c804472Sopenharmony_ci        return true;
4567c804472Sopenharmony_ci    }
4577c804472Sopenharmony_ci
4587c804472Sopenharmony_ci    std::string path = Value("f");
4597c804472Sopenharmony_ci    if (!FileSystem::IsFileExists(path)) {
4607c804472Sopenharmony_ci        errorInfo = std::string("The configuration file path does not exist.");
4617c804472Sopenharmony_ci        ELOG("Launch -f parameters abnormal!");
4627c804472Sopenharmony_ci        return false;
4637c804472Sopenharmony_ci    }
4647c804472Sopenharmony_ci    configPath = path;
4657c804472Sopenharmony_ci    return true;
4667c804472Sopenharmony_ci}
4677c804472Sopenharmony_ci
4687c804472Sopenharmony_cibool CommandParser::IsAppResourcePathValid()
4697c804472Sopenharmony_ci{
4707c804472Sopenharmony_ci    if (!IsSet("arp")) {
4717c804472Sopenharmony_ci        return true;
4727c804472Sopenharmony_ci    }
4737c804472Sopenharmony_ci
4747c804472Sopenharmony_ci    std::string path = Value("arp");
4757c804472Sopenharmony_ci    if (!FileSystem::IsDirectoryExists(path)) {
4767c804472Sopenharmony_ci        errorInfo = std::string("The configuration appResource path does not exist.");
4777c804472Sopenharmony_ci        ELOG("Launch -arp parameters abnormal!");
4787c804472Sopenharmony_ci        return false;
4797c804472Sopenharmony_ci    }
4807c804472Sopenharmony_ci    appResourcePath = path;
4817c804472Sopenharmony_ci    return true;
4827c804472Sopenharmony_ci}
4837c804472Sopenharmony_ci
4847c804472Sopenharmony_cibool CommandParser::IsProjectModelValid()
4857c804472Sopenharmony_ci{
4867c804472Sopenharmony_ci    if (!IsSet("pm")) {
4877c804472Sopenharmony_ci        return true;
4887c804472Sopenharmony_ci    }
4897c804472Sopenharmony_ci
4907c804472Sopenharmony_ci    std::string projectModelStr = Value("pm");
4917c804472Sopenharmony_ci    auto iter = find(projectModels.begin(), projectModels.end(), projectModelStr);
4927c804472Sopenharmony_ci    if (iter == projectModels.end()) {
4937c804472Sopenharmony_ci        errorInfo = std::string("The project model does not exist.");
4947c804472Sopenharmony_ci        ELOG("Launch -pm parameters abnormal!");
4957c804472Sopenharmony_ci        return false;
4967c804472Sopenharmony_ci    }
4977c804472Sopenharmony_ci
4987c804472Sopenharmony_ci    projectModel = projectModelStr;
4997c804472Sopenharmony_ci    ILOG("CommandParser projectModel: %s", projectModelStr.c_str());
5007c804472Sopenharmony_ci    return true;
5017c804472Sopenharmony_ci}
5027c804472Sopenharmony_ci
5037c804472Sopenharmony_cibool CommandParser::IsPagesValid()
5047c804472Sopenharmony_ci{
5057c804472Sopenharmony_ci    if (!IsSet("pages")) {
5067c804472Sopenharmony_ci        return true;
5077c804472Sopenharmony_ci    }
5087c804472Sopenharmony_ci    pages = Value("pages");
5097c804472Sopenharmony_ci    if (CheckParamInvalidity(pages, false)) {
5107c804472Sopenharmony_ci        errorInfo = "Launch -pages parameters is not match regex.";
5117c804472Sopenharmony_ci        return false;
5127c804472Sopenharmony_ci    }
5137c804472Sopenharmony_ci    ILOG("CommandParser pages: %s", pages.c_str());
5147c804472Sopenharmony_ci    return true;
5157c804472Sopenharmony_ci}
5167c804472Sopenharmony_ci
5177c804472Sopenharmony_cibool CommandParser::IsResolutionArgValid(std::string command)
5187c804472Sopenharmony_ci{
5197c804472Sopenharmony_ci    std::vector<std::string> value = Values(command);
5207c804472Sopenharmony_ci    uint32_t size = regsArgsCountMap[command];
5217c804472Sopenharmony_ci    if (value.size() != size) {
5227c804472Sopenharmony_ci        errorInfo = std::string("Invalid argument's count.");
5237c804472Sopenharmony_ci        return false;
5247c804472Sopenharmony_ci    }
5257c804472Sopenharmony_ci    if (IsResolutionRangeValid(value[0]) && IsResolutionRangeValid(value[1])) {
5267c804472Sopenharmony_ci        return true;
5277c804472Sopenharmony_ci    }
5287c804472Sopenharmony_ci    return false;
5297c804472Sopenharmony_ci}
5307c804472Sopenharmony_ci
5317c804472Sopenharmony_cibool CommandParser::IsResolutionRangeValid(std::string value)
5327c804472Sopenharmony_ci{
5337c804472Sopenharmony_ci    if (CheckParamInvalidity(value, true)) {
5347c804472Sopenharmony_ci        errorInfo = "Launch -or/-cr or -fr parameters is not match regex.";
5357c804472Sopenharmony_ci        return false;
5367c804472Sopenharmony_ci    }
5377c804472Sopenharmony_ci    int32_t temp = atoi(value.c_str());
5387c804472Sopenharmony_ci    if (!IsResolutionValid(temp)) {
5397c804472Sopenharmony_ci        errorInfo = std::string("Resolution range " + std::to_string(MIN_RESOLUTION) + "-" +
5407c804472Sopenharmony_ci            std::to_string(MAX_RESOLUTION) + ".");
5417c804472Sopenharmony_ci        return false;
5427c804472Sopenharmony_ci    }
5437c804472Sopenharmony_ci    return true;
5447c804472Sopenharmony_ci}
5457c804472Sopenharmony_ci
5467c804472Sopenharmony_cibool CommandParser::IsRefreshValid()
5477c804472Sopenharmony_ci{
5487c804472Sopenharmony_ci    if (!IsSet("refresh")) {
5497c804472Sopenharmony_ci        return true;
5507c804472Sopenharmony_ci    }
5517c804472Sopenharmony_ci
5527c804472Sopenharmony_ci    std::string refresh = Value("refresh");
5537c804472Sopenharmony_ci    if (refresh != "region" && refresh != "full") {
5547c804472Sopenharmony_ci        errorInfo = std::string("The refresh argument unsupported.");
5557c804472Sopenharmony_ci        ELOG("Launch -refresh parameters abnormal!");
5567c804472Sopenharmony_ci        return false;
5577c804472Sopenharmony_ci    }
5587c804472Sopenharmony_ci    if (refresh == "region") {
5597c804472Sopenharmony_ci        isRegionRefresh = true;
5607c804472Sopenharmony_ci    }
5617c804472Sopenharmony_ci    return true;
5627c804472Sopenharmony_ci}
5637c804472Sopenharmony_ci
5647c804472Sopenharmony_cibool CommandParser::IsCardValid()
5657c804472Sopenharmony_ci{
5667c804472Sopenharmony_ci    if (!IsSet("card")) {
5677c804472Sopenharmony_ci        return true;
5687c804472Sopenharmony_ci    }
5697c804472Sopenharmony_ci
5707c804472Sopenharmony_ci    std::string card = Value("card");
5717c804472Sopenharmony_ci    if (card != "true" && card != "false") {
5727c804472Sopenharmony_ci        errorInfo = std::string("The card argument unsupported.");
5737c804472Sopenharmony_ci        ELOG("Launch -card parameters abnormal!");
5747c804472Sopenharmony_ci        return false;
5757c804472Sopenharmony_ci    }
5767c804472Sopenharmony_ci
5777c804472Sopenharmony_ci    std::string devicetype = GetDeviceType();
5787c804472Sopenharmony_ci    auto iter = find(cardDisplayDevices.begin(), cardDisplayDevices.end(), devicetype);
5797c804472Sopenharmony_ci    if (iter != cardDisplayDevices.end() && card == "true") {
5807c804472Sopenharmony_ci        isCardDisplay = true;
5817c804472Sopenharmony_ci    }
5827c804472Sopenharmony_ci    return true;
5837c804472Sopenharmony_ci}
5847c804472Sopenharmony_ci
5857c804472Sopenharmony_cibool CommandParser::IsProjectIDValid()
5867c804472Sopenharmony_ci{
5877c804472Sopenharmony_ci    if (IsSet("projectID")) {
5887c804472Sopenharmony_ci        projectID = Value("projectID");
5897c804472Sopenharmony_ci        if (CheckParamInvalidity(projectID, false)) {
5907c804472Sopenharmony_ci            errorInfo = "Launch -projectID parameters is not match regex.";
5917c804472Sopenharmony_ci            return false;
5927c804472Sopenharmony_ci        }
5937c804472Sopenharmony_ci    }
5947c804472Sopenharmony_ci    return true;
5957c804472Sopenharmony_ci}
5967c804472Sopenharmony_ci
5977c804472Sopenharmony_cibool CommandParser::IsColorModeValid()
5987c804472Sopenharmony_ci{
5997c804472Sopenharmony_ci    if (!IsSet("cm")) {
6007c804472Sopenharmony_ci        return true;
6017c804472Sopenharmony_ci    }
6027c804472Sopenharmony_ci
6037c804472Sopenharmony_ci    std::string colorMode = Value("cm");
6047c804472Sopenharmony_ci    if (colorMode != "dark" && colorMode != "light") {
6057c804472Sopenharmony_ci        errorInfo = std::string("The colormode argument unsupported.");
6067c804472Sopenharmony_ci        ELOG("Launch -cm parameters abnormal!");
6077c804472Sopenharmony_ci        return false;
6087c804472Sopenharmony_ci    }
6097c804472Sopenharmony_ci    return true;
6107c804472Sopenharmony_ci}
6117c804472Sopenharmony_ci
6127c804472Sopenharmony_cibool CommandParser::IsAceVersionValid()
6137c804472Sopenharmony_ci{
6147c804472Sopenharmony_ci    if (!IsSet("av")) {
6157c804472Sopenharmony_ci        return true;
6167c804472Sopenharmony_ci    }
6177c804472Sopenharmony_ci
6187c804472Sopenharmony_ci    std::string aceVersion = Value("av");
6197c804472Sopenharmony_ci    if (aceVersion != "ACE_1_0" && aceVersion != "ACE_2_0") {
6207c804472Sopenharmony_ci        errorInfo = std::string("The aceVersion argument unsupported.");
6217c804472Sopenharmony_ci        ELOG("Launch -av parameters abnormal!");
6227c804472Sopenharmony_ci        return false;
6237c804472Sopenharmony_ci    }
6247c804472Sopenharmony_ci    return true;
6257c804472Sopenharmony_ci}
6267c804472Sopenharmony_ci
6277c804472Sopenharmony_cibool CommandParser::IsOrientationValid()
6287c804472Sopenharmony_ci{
6297c804472Sopenharmony_ci    if (!IsSet("o")) {
6307c804472Sopenharmony_ci        return true;
6317c804472Sopenharmony_ci    }
6327c804472Sopenharmony_ci
6337c804472Sopenharmony_ci    std::string orientation = Value("o");
6347c804472Sopenharmony_ci    if (orientation != "portrait" && orientation != "landscape") {
6357c804472Sopenharmony_ci        errorInfo = std::string("The orientation argument unsupported.");
6367c804472Sopenharmony_ci        ELOG("Launch -o parameters abnormal!");
6377c804472Sopenharmony_ci        return false;
6387c804472Sopenharmony_ci    }
6397c804472Sopenharmony_ci    return true;
6407c804472Sopenharmony_ci}
6417c804472Sopenharmony_ci
6427c804472Sopenharmony_cibool CommandParser::IsWebSocketPortValid()
6437c804472Sopenharmony_ci{
6447c804472Sopenharmony_ci    if (IsSet("lws")) {
6457c804472Sopenharmony_ci        if (CheckParamInvalidity(Value("lws"), true)) {
6467c804472Sopenharmony_ci            errorInfo = "Launch -lws parameters is not match regex.";
6477c804472Sopenharmony_ci            return false;
6487c804472Sopenharmony_ci        }
6497c804472Sopenharmony_ci        int port = atoi(Value("lws").c_str());
6507c804472Sopenharmony_ci        if (port < MIN_PORT || port > MAX_PORT) {
6517c804472Sopenharmony_ci            errorInfo = std::string("WebSocket listening port out of range: " + std::to_string(MIN_PORT) + "-" +
6527c804472Sopenharmony_ci                std::to_string(MAX_PORT) + ".");
6537c804472Sopenharmony_ci            ELOG("Launch -lws parameters abnormal!");
6547c804472Sopenharmony_ci            return false;
6557c804472Sopenharmony_ci        }
6567c804472Sopenharmony_ci    }
6577c804472Sopenharmony_ci    ILOG("CommandParser WebSocket listening port: %s", Value("lws").c_str());
6587c804472Sopenharmony_ci    return true;
6597c804472Sopenharmony_ci}
6607c804472Sopenharmony_ci
6617c804472Sopenharmony_cibool CommandParser::IsScreenModeValid()
6627c804472Sopenharmony_ci{
6637c804472Sopenharmony_ci    std::string mode("dynamic");
6647c804472Sopenharmony_ci    if (IsSet("sm")) {
6657c804472Sopenharmony_ci        mode = Value("sm");
6667c804472Sopenharmony_ci        if (mode != "dynamic" && mode != "static") {
6677c804472Sopenharmony_ci            errorInfo = std::string("Screen picture transport mode suported: dynamic or static");
6687c804472Sopenharmony_ci            ELOG("Launch -sm parameters abnormal!");
6697c804472Sopenharmony_ci            return false;
6707c804472Sopenharmony_ci        }
6717c804472Sopenharmony_ci        screenMode = (mode == "static" ? CommandParser::ScreenMode::STATIC :
6727c804472Sopenharmony_ci                      CommandParser::ScreenMode::DYNAMIC);
6737c804472Sopenharmony_ci    }
6747c804472Sopenharmony_ci    ILOG("CommandParser screen mode: %s", mode.c_str());
6757c804472Sopenharmony_ci    return true;
6767c804472Sopenharmony_ci}
6777c804472Sopenharmony_ci
6787c804472Sopenharmony_cibool CommandParser::IsLanguageValid()
6797c804472Sopenharmony_ci{
6807c804472Sopenharmony_ci    if (!IsSet("l")) {
6817c804472Sopenharmony_ci        return true;
6827c804472Sopenharmony_ci    }
6837c804472Sopenharmony_ci    std::string lan = Value("l");
6847c804472Sopenharmony_ci    if (CheckParamInvalidity(lan, false)) {
6857c804472Sopenharmony_ci        errorInfo = "Launch -l parameters is not match regex.";
6867c804472Sopenharmony_ci        return false;
6877c804472Sopenharmony_ci    }
6887c804472Sopenharmony_ci    ILOG("CommandParser l: %s", lan.c_str());
6897c804472Sopenharmony_ci    return true;
6907c804472Sopenharmony_ci}
6917c804472Sopenharmony_ci
6927c804472Sopenharmony_cibool CommandParser::IsTracePipeNameValid()
6937c804472Sopenharmony_ci{
6947c804472Sopenharmony_ci    if (!IsSet("ts")) {
6957c804472Sopenharmony_ci        return true;
6967c804472Sopenharmony_ci    }
6977c804472Sopenharmony_ci    std::string tsName = Value("ts");
6987c804472Sopenharmony_ci    if (CheckParamInvalidity(tsName, false)) {
6997c804472Sopenharmony_ci        errorInfo = "Launch -ts parameters is not match regex.";
7007c804472Sopenharmony_ci        return false;
7017c804472Sopenharmony_ci    }
7027c804472Sopenharmony_ci    ILOG("CommandParser ts: %s", tsName.c_str());
7037c804472Sopenharmony_ci    return true;
7047c804472Sopenharmony_ci}
7057c804472Sopenharmony_ci
7067c804472Sopenharmony_cibool CommandParser::IsLocalSocketNameValid()
7077c804472Sopenharmony_ci{
7087c804472Sopenharmony_ci    if (!IsSet("s")) {
7097c804472Sopenharmony_ci        return true;
7107c804472Sopenharmony_ci    }
7117c804472Sopenharmony_ci    std::string socketName = Value("s");
7127c804472Sopenharmony_ci    std::string regexStr = "^(?:[a-zA-Z0-9-_./\\s*]+)$";
7137c804472Sopenharmony_ci    std::regex reg(regexStr);
7147c804472Sopenharmony_ci    if (!std::regex_match(socketName.cbegin(), socketName.cend(), reg)) {
7157c804472Sopenharmony_ci        errorInfo = "Launch -s parameters is not match regex.";
7167c804472Sopenharmony_ci        return false;
7177c804472Sopenharmony_ci    }
7187c804472Sopenharmony_ci    ILOG("CommandParser s: %s", socketName.c_str());
7197c804472Sopenharmony_ci    return true;
7207c804472Sopenharmony_ci}
7217c804472Sopenharmony_ci
7227c804472Sopenharmony_cibool CommandParser::IsConfigChangesValid()
7237c804472Sopenharmony_ci{
7247c804472Sopenharmony_ci    if (!IsSet("cc")) {
7257c804472Sopenharmony_ci        return true;
7267c804472Sopenharmony_ci    }
7277c804472Sopenharmony_ci    std::string configChange = Value("cc");
7287c804472Sopenharmony_ci    if (CheckParamInvalidity(configChange, false)) {
7297c804472Sopenharmony_ci        ELOG("Launch -cc parameters is not match regex.");
7307c804472Sopenharmony_ci        return false;
7317c804472Sopenharmony_ci    }
7327c804472Sopenharmony_ci    ILOG("CommandParser cc: %s", configChange.c_str());
7337c804472Sopenharmony_ci    return true;
7347c804472Sopenharmony_ci}
7357c804472Sopenharmony_ci
7367c804472Sopenharmony_cibool CommandParser::IsScreenDensityValid()
7377c804472Sopenharmony_ci{
7387c804472Sopenharmony_ci    if (!IsSet("sd")) {
7397c804472Sopenharmony_ci        return true;
7407c804472Sopenharmony_ci    }
7417c804472Sopenharmony_ci    std::string density = Value("sd");
7427c804472Sopenharmony_ci    if (CheckParamInvalidity(density, true)) {
7437c804472Sopenharmony_ci        errorInfo = "Launch -sd parameters is not match regex.";
7447c804472Sopenharmony_ci        return false;
7457c804472Sopenharmony_ci    }
7467c804472Sopenharmony_ci    ILOG("CommandParser sd: %s", density.c_str());
7477c804472Sopenharmony_ci    return true;
7487c804472Sopenharmony_ci}
7497c804472Sopenharmony_ci
7507c804472Sopenharmony_cibool CommandParser::IsContainerSdkPathValid()
7517c804472Sopenharmony_ci{
7527c804472Sopenharmony_ci    if (!IsSet("hsp")) {
7537c804472Sopenharmony_ci        return true;
7547c804472Sopenharmony_ci    }
7557c804472Sopenharmony_ci
7567c804472Sopenharmony_ci    std::string path = Value("hsp");
7577c804472Sopenharmony_ci    if (!FileSystem::IsDirectoryExists(path)) {
7587c804472Sopenharmony_ci        errorInfo = std::string("The container sdk path does not exist.");
7597c804472Sopenharmony_ci        ELOG("Launch -hsp parameters abnormal!");
7607c804472Sopenharmony_ci        return false;
7617c804472Sopenharmony_ci    }
7627c804472Sopenharmony_ci    containerSdkPath = path;
7637c804472Sopenharmony_ci    return true;
7647c804472Sopenharmony_ci}
7657c804472Sopenharmony_ci
7667c804472Sopenharmony_cistd::string CommandParser::HelpText()
7677c804472Sopenharmony_ci{
7687c804472Sopenharmony_ci    std::string helpText = "Usage:\n";
7697c804472Sopenharmony_ci    for (auto index = regsHelpMap.begin(); index != regsHelpMap.end(); index++) {
7707c804472Sopenharmony_ci        helpText += "-" + index->first + " ";
7717c804472Sopenharmony_ci        helpText += index->second + "\n";
7727c804472Sopenharmony_ci    }
7737c804472Sopenharmony_ci    return helpText;
7747c804472Sopenharmony_ci}
7757c804472Sopenharmony_ci
7767c804472Sopenharmony_civoid CommandParser::ProcessingCommand(const std::vector<std::string>& strs)
7777c804472Sopenharmony_ci{
7787c804472Sopenharmony_ci    for (unsigned int i = 0; i < strs.size(); ++i) {
7797c804472Sopenharmony_ci        std::string index = strs[i];
7807c804472Sopenharmony_ci        auto regInfo = regsArgsCountMap.find(strs[i]);
7817c804472Sopenharmony_ci        if (regInfo == regsArgsCountMap.end()) {
7827c804472Sopenharmony_ci            continue;
7837c804472Sopenharmony_ci        }
7847c804472Sopenharmony_ci
7857c804472Sopenharmony_ci        std::vector<std::string> args;
7867c804472Sopenharmony_ci        for (uint32_t j = 0; j < regInfo->second; ++j) {
7877c804472Sopenharmony_ci            if (i == strs.size() - 1  || strs[i + 1][0] == '-') {
7887c804472Sopenharmony_ci                args.push_back("");
7897c804472Sopenharmony_ci                break;
7907c804472Sopenharmony_ci            }
7917c804472Sopenharmony_ci            args.push_back(strs[++i]);
7927c804472Sopenharmony_ci        }
7937c804472Sopenharmony_ci        argsMap[index] = args;
7947c804472Sopenharmony_ci    }
7957c804472Sopenharmony_ci}
7967c804472Sopenharmony_ci
7977c804472Sopenharmony_ciint CommandParser::GetProjectModelEnumValue() const
7987c804472Sopenharmony_ci{
7997c804472Sopenharmony_ci    auto idxVal = std::distance(projectModels.begin(),
8007c804472Sopenharmony_ci                                find(projectModels.begin(), projectModels.end(), projectModel));
8017c804472Sopenharmony_ci    idxVal = (idxVal >= projectModels.size()) ? 0 : idxVal;
8027c804472Sopenharmony_ci    return idxVal;
8037c804472Sopenharmony_ci}
8047c804472Sopenharmony_ci
8057c804472Sopenharmony_cistd::string CommandParser::GetProjectModelEnumName(int enumValue) const
8067c804472Sopenharmony_ci{
8077c804472Sopenharmony_ci    if (enumValue < 0 || enumValue >= projectModels.size()) {
8087c804472Sopenharmony_ci        enumValue = 0;
8097c804472Sopenharmony_ci    }
8107c804472Sopenharmony_ci    return projectModels[enumValue];
8117c804472Sopenharmony_ci}
8127c804472Sopenharmony_ci
8137c804472Sopenharmony_cibool CommandParser::CheckParamInvalidity(std::string param, bool isNum = false)
8147c804472Sopenharmony_ci{
8157c804472Sopenharmony_ci    std::regex reg(isNum ? regex4Num : regex4Str);
8167c804472Sopenharmony_ci    return !std::regex_match(param.cbegin(), param.cend(), reg);
8177c804472Sopenharmony_ci}
8187c804472Sopenharmony_ci
8197c804472Sopenharmony_cibool CommandParser::IsComponentModeValid()
8207c804472Sopenharmony_ci{
8217c804472Sopenharmony_ci    if (!IsSet("cpm")) {
8227c804472Sopenharmony_ci        return true;
8237c804472Sopenharmony_ci    }
8247c804472Sopenharmony_ci
8257c804472Sopenharmony_ci    std::string cpm = Value("cpm");
8267c804472Sopenharmony_ci    if (cpm != "true" && cpm != "false") {
8277c804472Sopenharmony_ci        errorInfo = std::string("The component mode argument unsupported.");
8287c804472Sopenharmony_ci        ELOG("Launch -cpm parameters abnormal!");
8297c804472Sopenharmony_ci        return false;
8307c804472Sopenharmony_ci    }
8317c804472Sopenharmony_ci
8327c804472Sopenharmony_ci    isComponentMode = cpm == "true" ? true : false;
8337c804472Sopenharmony_ci    return true;
8347c804472Sopenharmony_ci}
8357c804472Sopenharmony_ci
8367c804472Sopenharmony_cibool CommandParser::IsAbilityPathValid()
8377c804472Sopenharmony_ci{
8387c804472Sopenharmony_ci    if (!IsSet("d")) {
8397c804472Sopenharmony_ci        return true;
8407c804472Sopenharmony_ci    }
8417c804472Sopenharmony_ci    if (deviceType == "liteWearable" || deviceType == "smartVision") {
8427c804472Sopenharmony_ci        return true;
8437c804472Sopenharmony_ci    }
8447c804472Sopenharmony_ci    if (!IsSet("abp")) {
8457c804472Sopenharmony_ci        errorInfo = "Launch -d parameters without -abp parameters.";
8467c804472Sopenharmony_ci        return false;
8477c804472Sopenharmony_ci    }
8487c804472Sopenharmony_ci    std::string path = Value("abp");
8497c804472Sopenharmony_ci    if (path.empty()) {
8507c804472Sopenharmony_ci        errorInfo = std::string("The ability path is empty.");
8517c804472Sopenharmony_ci        ELOG("Launch -abp parameters abnormal!");
8527c804472Sopenharmony_ci        return false;
8537c804472Sopenharmony_ci    }
8547c804472Sopenharmony_ci    abilityPath = path;
8557c804472Sopenharmony_ci    return true;
8567c804472Sopenharmony_ci}
8577c804472Sopenharmony_ci
8587c804472Sopenharmony_cibool CommandParser::IsAbilityNameValid()
8597c804472Sopenharmony_ci{
8607c804472Sopenharmony_ci    if (!IsSet("d")) {
8617c804472Sopenharmony_ci        return true;
8627c804472Sopenharmony_ci    }
8637c804472Sopenharmony_ci    if (deviceType == "liteWearable" || deviceType == "smartVision") {
8647c804472Sopenharmony_ci        return true;
8657c804472Sopenharmony_ci    }
8667c804472Sopenharmony_ci    if (!IsSet("abn")) {
8677c804472Sopenharmony_ci        ELOG("Launch -d parameters without -abn parameters.");
8687c804472Sopenharmony_ci        return true; // 兼容老版本IDE(沒有abn参数)
8697c804472Sopenharmony_ci    }
8707c804472Sopenharmony_ci    std::string name = Value("abn");
8717c804472Sopenharmony_ci    if (name.empty()) {
8727c804472Sopenharmony_ci        errorInfo = std::string("The ability name is empty.");
8737c804472Sopenharmony_ci        ELOG("Launch -abn parameters abnormal!");
8747c804472Sopenharmony_ci        return false;
8757c804472Sopenharmony_ci    }
8767c804472Sopenharmony_ci    abilityName = name;
8777c804472Sopenharmony_ci    return true;
8787c804472Sopenharmony_ci}
8797c804472Sopenharmony_ci
8807c804472Sopenharmony_cibool CommandParser::IsStaticCardValid()
8817c804472Sopenharmony_ci{
8827c804472Sopenharmony_ci    if (!IsSet("staticCard")) {
8837c804472Sopenharmony_ci        return true;
8847c804472Sopenharmony_ci    }
8857c804472Sopenharmony_ci    std::string val = Value("staticCard");
8867c804472Sopenharmony_ci    if (val != "true" && val != "false") {
8877c804472Sopenharmony_ci        errorInfo = std::string("The staticCard argument unsupported.");
8887c804472Sopenharmony_ci        ELOG("Launch -staticCard parameters abnormal!");
8897c804472Sopenharmony_ci        return false;
8907c804472Sopenharmony_ci    }
8917c804472Sopenharmony_ci    if (val == "true") {
8927c804472Sopenharmony_ci        staticCard = true;
8937c804472Sopenharmony_ci    }
8947c804472Sopenharmony_ci    return true;
8957c804472Sopenharmony_ci}
8967c804472Sopenharmony_ci
8977c804472Sopenharmony_cibool CommandParser::IsMainArgLengthInvalid(const char* str) const
8987c804472Sopenharmony_ci{
8997c804472Sopenharmony_ci    size_t argLength = strlen(str);
9007c804472Sopenharmony_ci    if (argLength > maxMainArgLength) {
9017c804472Sopenharmony_ci        ELOG("param size is more than %d", maxMainArgLength);
9027c804472Sopenharmony_ci        return true;
9037c804472Sopenharmony_ci    }
9047c804472Sopenharmony_ci    return false;
9057c804472Sopenharmony_ci}
9067c804472Sopenharmony_ci
9077c804472Sopenharmony_cibool CommandParser::IsFoldableValid()
9087c804472Sopenharmony_ci{
9097c804472Sopenharmony_ci    if (!IsSet("foldable")) {
9107c804472Sopenharmony_ci        return true;
9117c804472Sopenharmony_ci    }
9127c804472Sopenharmony_ci    std::string val = Value("foldable");
9137c804472Sopenharmony_ci    if (val != "true" && val != "false") {
9147c804472Sopenharmony_ci        errorInfo = std::string("The foldable argument unsupported.");
9157c804472Sopenharmony_ci        ELOG("Launch -foldable parameters abnormal!");
9167c804472Sopenharmony_ci        return false;
9177c804472Sopenharmony_ci    }
9187c804472Sopenharmony_ci    if (val == "true") {
9197c804472Sopenharmony_ci        foldable = true;
9207c804472Sopenharmony_ci    }
9217c804472Sopenharmony_ci    return true;
9227c804472Sopenharmony_ci}
9237c804472Sopenharmony_ci
9247c804472Sopenharmony_cibool CommandParser::IsFoldStatusValid()
9257c804472Sopenharmony_ci{
9267c804472Sopenharmony_ci    if ((!IsSet("foldable")) || Value("foldable") != "true") {
9277c804472Sopenharmony_ci        return true;
9287c804472Sopenharmony_ci    }
9297c804472Sopenharmony_ci    if (IsSet("foldStatus")) {
9307c804472Sopenharmony_ci        if (Value("foldStatus") == "fold" || Value("foldStatus") == "unfold" ||
9317c804472Sopenharmony_ci            Value("foldStatus") == "unknown" || Value("foldStatus") == "half_fold") {
9327c804472Sopenharmony_ci            foldStatus = Value("foldStatus");
9337c804472Sopenharmony_ci            return true;
9347c804472Sopenharmony_ci        }
9357c804472Sopenharmony_ci    }
9367c804472Sopenharmony_ci    ELOG("Launch -foldStatus parameters abnormal!");
9377c804472Sopenharmony_ci    return false;
9387c804472Sopenharmony_ci}
9397c804472Sopenharmony_ci
9407c804472Sopenharmony_cibool CommandParser::IsFoldResolutionValid()
9417c804472Sopenharmony_ci{
9427c804472Sopenharmony_ci    if ((!IsSet("foldable")) || Value("foldable") != "true") {
9437c804472Sopenharmony_ci        return true;
9447c804472Sopenharmony_ci    }
9457c804472Sopenharmony_ci    if (IsSet("fr")) {
9467c804472Sopenharmony_ci        if (IsResolutionArgValid(std::string("-fr"))) {
9477c804472Sopenharmony_ci            foldResolutionWidth = atoi(Values("-fr")[0].c_str());
9487c804472Sopenharmony_ci            foldResolutionHeight = atoi(Values("-fr")[1].c_str());
9497c804472Sopenharmony_ci            ILOG("CommandParser fold resolution: %d %d", foldResolutionWidth, foldResolutionHeight);
9507c804472Sopenharmony_ci            return true;
9517c804472Sopenharmony_ci        }
9527c804472Sopenharmony_ci        ELOG("Launch -fr parameters abnormal!");
9537c804472Sopenharmony_ci        return false;
9547c804472Sopenharmony_ci    }
9557c804472Sopenharmony_ci    ELOG("Launch -fr parameters abnormal!");
9567c804472Sopenharmony_ci    errorInfo = std::string("Fold resolution must be setted.");
9577c804472Sopenharmony_ci    return false;
9587c804472Sopenharmony_ci}
9597c804472Sopenharmony_ci
9607c804472Sopenharmony_cibool CommandParser::IsFoldable() const
9617c804472Sopenharmony_ci{
9627c804472Sopenharmony_ci    return foldable;
9637c804472Sopenharmony_ci}
9647c804472Sopenharmony_ci
9657c804472Sopenharmony_cistd::string CommandParser::GetFoldStatus() const
9667c804472Sopenharmony_ci{
9677c804472Sopenharmony_ci    return foldStatus;
9687c804472Sopenharmony_ci}
9697c804472Sopenharmony_ci
9707c804472Sopenharmony_ciint32_t CommandParser::GetFoldResolutionWidth() const
9717c804472Sopenharmony_ci{
9727c804472Sopenharmony_ci    return foldResolutionWidth;
9737c804472Sopenharmony_ci}
9747c804472Sopenharmony_ci
9757c804472Sopenharmony_ciint32_t CommandParser::GetFoldResolutionHeight() const
9767c804472Sopenharmony_ci{
9777c804472Sopenharmony_ci    return foldResolutionHeight;
9787c804472Sopenharmony_ci}
9797c804472Sopenharmony_ci
9807c804472Sopenharmony_cistd::string CommandParser::GetLoaderJsonPath() const
9817c804472Sopenharmony_ci{
9827c804472Sopenharmony_ci    return loaderJsonPath;
9837c804472Sopenharmony_ci}
9847c804472Sopenharmony_ci
9857c804472Sopenharmony_cibool CommandParser::IsLoaderJsonPathValid()
9867c804472Sopenharmony_ci{
9877c804472Sopenharmony_ci    if (!IsSet("ljPath")) {
9887c804472Sopenharmony_ci        return true;
9897c804472Sopenharmony_ci    }
9907c804472Sopenharmony_ci    std::string path = Value("ljPath");
9917c804472Sopenharmony_ci    if (!FileSystem::IsFileExists(path)) {
9927c804472Sopenharmony_ci        errorInfo = std::string("The configuration loader.json path does not exist.");
9937c804472Sopenharmony_ci        ELOG("Launch -ljPath parameters abnormal!");
9947c804472Sopenharmony_ci        return false;
9957c804472Sopenharmony_ci    }
9967c804472Sopenharmony_ci    loaderJsonPath = path;
9977c804472Sopenharmony_ci    return true;
9987c804472Sopenharmony_ci}
9997c804472Sopenharmony_ci
10007c804472Sopenharmony_ciint CommandParser::ParseArgs(int argc, char* argv[])
10017c804472Sopenharmony_ci{
10027c804472Sopenharmony_ci    int startParamInvalidCode = 11;
10037c804472Sopenharmony_ci    int defaultReturnVal = -1;
10047c804472Sopenharmony_ci    std::vector<std::string> strs;
10057c804472Sopenharmony_ci    for (int i = 1; i < argc; ++i) {
10067c804472Sopenharmony_ci        if (IsMainArgLengthInvalid(argv[i])) {
10077c804472Sopenharmony_ci            return startParamInvalidCode;
10087c804472Sopenharmony_ci        }
10097c804472Sopenharmony_ci        strs.push_back(argv[i]);
10107c804472Sopenharmony_ci    }
10117c804472Sopenharmony_ci    if (!ProcessCommand(strs)) {
10127c804472Sopenharmony_ci        return 0;
10137c804472Sopenharmony_ci    }
10147c804472Sopenharmony_ci    if (!IsCommandValid()) {
10157c804472Sopenharmony_ci        FLOG("Start args is invalid.");
10167c804472Sopenharmony_ci        return startParamInvalidCode;
10177c804472Sopenharmony_ci    }
10187c804472Sopenharmony_ci    return defaultReturnVal;
10197c804472Sopenharmony_ci}
10207c804472Sopenharmony_ci
10217c804472Sopenharmony_civoid CommandParser::GetCommandInfo(CommandInfo& info) const
10227c804472Sopenharmony_ci{
10237c804472Sopenharmony_ci    info.deviceType = GetDeviceType();
10247c804472Sopenharmony_ci    info.pages = GetPages();
10257c804472Sopenharmony_ci    info.appResourcePath = GetAppResourcePath();
10267c804472Sopenharmony_ci    info.isCardDisplay = IsCardDisplay();
10277c804472Sopenharmony_ci    info.containerSdkPath = GetContainerSdkPath();
10287c804472Sopenharmony_ci    info.isComponentMode = IsComponentMode();
10297c804472Sopenharmony_ci    info.loaderJsonPath = GetLoaderJsonPath();
10307c804472Sopenharmony_ci    info.abilityPath = GetAbilityPath();
10317c804472Sopenharmony_ci    info.abilityName = GetAbilityName();
10327c804472Sopenharmony_ci    info.configPath = GetConfigPath();
10337c804472Sopenharmony_ci    info.screenShape = GetScreenShape();
10347c804472Sopenharmony_ci    info.orignalResolutionWidth = GetOrignalResolutionWidth();
10357c804472Sopenharmony_ci    info.orignalResolutionHeight = GetOrignalResolutionHeight();
10367c804472Sopenharmony_ci    info.compressionResolutionWidth = GetCompressionResolutionWidth();
10377c804472Sopenharmony_ci    info.compressionResolutionHeight = GetCompressionResolutionHeight();
10387c804472Sopenharmony_ci}
10397c804472Sopenharmony_ci
10407c804472Sopenharmony_civoid CommandParser::GetFoldInfo(FoldInfo& info) const
10417c804472Sopenharmony_ci{
10427c804472Sopenharmony_ci    info.foldable = IsFoldable();
10437c804472Sopenharmony_ci    info.foldStatus = GetFoldStatus();
10447c804472Sopenharmony_ci    info.foldResolutionWidth = GetFoldResolutionWidth();
10457c804472Sopenharmony_ci    info.foldResolutionHeight = GetFoldResolutionHeight();
10467c804472Sopenharmony_ci}
10477c804472Sopenharmony_ci
10487c804472Sopenharmony_ci#ifdef COMPONENT_TEST_ENABLED
10497c804472Sopenharmony_cistd::string CommandParser::GetComponentTestConfig() const
10507c804472Sopenharmony_ci{
10517c804472Sopenharmony_ci    return componentTestConfig;
10527c804472Sopenharmony_ci}
10537c804472Sopenharmony_ci#endif // COMPONENT_TEST_ENABLED