/* * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef OHOS_ABILITY_RUNTIME_CC_COMMAND_H #define OHOS_ABILITY_RUNTIME_CC_COMMAND_H #include #include "ability_manager_interface.h" #include "cc_param_parser.h" #include "insight_intent/insight_intent_info_for_query.h" #include "shell_command.h" namespace OHOS { namespace AAFwk { namespace { const std::string TOOL_NAME = "ohos-claw-cc"; const std::string HELP_MSG = "ohos-claw-cc - InsightIntent framework CLI tool for executing and querying insight intents\n" "\n" "Usage:\n" " ohos-claw-cc [options]\n" "\n" "Parameters:\n" " --help Display this help message\n" "\n" "SubCommands:\n" " execute-intent Execute an insight intent and return the result\n" " get-intent Query insight intent registration information\n" "\n" "Examples:\n" " ohos-claw-cc execute-intent --bundleName com.example --moduleName entry --intentName MyIntent\n" " ohos-claw-cc get-intent --executeMode 1 --flag 1\n"; const std::string HELP_MSG_EXECUTE_INTENT = "ohos-claw-cc execute-intent - Execute an insight intent synchronously and return the result\n" "\n" "Usage:\n" " ohos-claw-cc execute-intent [options]\n" "\n" "Parameters:\n" " --bundleName Target application bundle name (required)\n" " --moduleName Module name within the bundle (required)\n" " --intentName Insight intent name to execute (required)\n" " --abilityName Ability name (required, pass empty string '' if not needed)\n" " --executeMode Execute mode (required, range: 0-3)\n" " 0=UI_ABILITY_FOREGROUND, 1=UI_ABILITY_BACKGROUND,\n" " 2=UI_EXTENSION_ABILITY, 3=SERVICE_EXTENSION_ABILITY\n" " --param Intent parameters as JSON string (required, pass '{}' if not needed)\n" " For link-type intents, include \"uri\" field in JSON, e.g.\n" " '{\"uri\":\"https://example.com/page\",\"key\":\"value\"}'\n" " --help Display this help message\n" "\n" "Examples:\n" " ohos-claw-cc execute-intent --bundleName com.example --moduleName entry --intentName MyIntent\n" "\n" " ohos-claw-cc execute-intent --bundleName com.example --moduleName entry\n" " --intentName MyIntent --executeMode 0 --param '{\"key1\":\"value1\"}'\n"; const std::string HELP_MSG_GET_INTENT = "ohos-claw-cc get-intent - Query insight intent registration information\n" "\n" "Usage:\n" " ohos-claw-cc get-intent [options]\n" "\n" "Parameters:\n" " --executeMode Query mode (required, values: 1-3)\n" " 1=query all, 2=query by bundle, 3=query by intent name\n" " --flag Query flag (required, values: 1, 2, 5, 6)\n" " 1=GET_FULL_INSIGHT_INTENT, 2=GET_SUMMARY_INSIGHT_INTENT,\n" " 5=FULL+ENTITY_INFO, 6=SUMMARY+ENTITY_INFO\n" " --bundleName Bundle name (required when executeMode is 2 or 3)\n" " --moduleName Module name (required when executeMode is 3)\n" " --intentName Intent name (required when executeMode is 3)\n" " --help Display this help message\n" "\n" "Examples:\n" " ohos-claw-cc get-intent --executeMode 1 --flag 1\n" "\n" " ohos-claw-cc get-intent --executeMode 2 --flag 1 --bundleName com.example.bundle\n" "\n" " ohos-claw-cc get-intent --executeMode 3 --flag 1\n" " --bundleName com.example.bundle --moduleName entry --intentName MyIntent\n"; } // namespace class InsightIntentShellCommand : public ShellCommand { public: InsightIntentShellCommand(int argc, char* argv[]); ~InsightIntentShellCommand() override = default; ErrCode CreateMessageMap() override; private: ErrCode CreateCommandMap() override; ErrCode init() override; ErrCode RunAsHelpCommand(); ErrCode RunAsExecuteIntentCommand(); ErrCode RunAsGetIntentCommand(); ErrCode ParseExecuteIntentOptions(std::string &bundleName, std::string &moduleName, std::string &abilityName, std::string &insightIntentName, std::string &intentParamJson, int32_t &executeMode); ErrCode HandleExecuteIntentOption(int option, std::string &bundleName, std::string &moduleName, std::string &abilityName, std::string &insightIntentName, std::string &intentParamJson, int32_t &executeMode); ErrCode CheckRequiredExecuteParams(const std::string &bundleName, const std::string &moduleName, const std::string &insightIntentName); ErrCode CheckAllExecuteParams(const std::string &bundleName, const std::string &moduleName, const std::string &insightIntentName, const std::string &abilityName, int32_t executeMode, const std::string &intentParamJson); ErrCode ValidateGetIntentParams(int32_t flag, int32_t executeMode); ErrCode ValidateIntentFromDatabase(const std::string &bundleName, const std::string &moduleName, const std::string &insightIntentName, AbilityRuntime::InsightIntentInfoForQuery &queryInfo); int8_t ConvertIntentTypeToDecoratorType(const std::string &intentType); void BuildExecuteParam(InsightIntentExecuteParam ¶m, const std::string &bundleName, const std::string &moduleName, const std::string &abilityName, const std::string &insightIntentName, int32_t executeMode, const std::string &intentType, const std::string &intentParamJson); ErrCode ExecuteIntentWithParam(const InsightIntentExecuteParam ¶m); void AppendExecuteResult(const InsightIntentExecuteResult &executeResult); ErrCode ParseGetIntentOptions(int32_t &flag, int32_t &executeMode, std::string &bundleName, std::string &moduleName, std::string &intentName); ErrCode HandleGetIntentOption(int option, int32_t &flag, int32_t &executeMode, std::string &bundleName, std::string &moduleName, std::string &intentName); ErrCode DispatchGetIntentMode(int32_t executeMode, int32_t flag, const std::string &bundleName, const std::string &moduleName, const std::string &intentName); ErrCode RunGetIntentModeAll(int32_t flag); ErrCode RunGetIntentModeByBundle(int32_t flag, const std::string &bundleName); ErrCode RunGetIntentModeByIntent(int32_t flag, const std::string &bundleName, const std::string &moduleName, const std::string &intentName); ErrCode ParseIntOption(const char *arg, int32_t &value); bool ShouldAppendEntityInfo(int32_t flag) const; bool IsFullInfo(int32_t flag) const; ErrCode ValidateExecuteMode(int32_t executeMode); void AppendResultEvent(const nlohmann::json &data); void AppendErrorEvent(const std::string &errCode, const std::string &errMsg, const std::string &suggestion); nlohmann::json BuildIntentInfoListJson( const std::vector &infos, int32_t flag); nlohmann::json BuildIntentInfoJson( const AbilityRuntime::InsightIntentInfoForQuery &info, int32_t flag); nlohmann::json BuildEntityJson( const AbilityRuntime::EntityInfoForQuery &entity); nlohmann::json CollectSupportedModesJson( const AbilityRuntime::InsightIntentInfoForQuery &queryInfo); }; } // namespace AAFwk } // namespace OHOS #endif // OHOS_ABILITY_RUNTIME_CC_COMMAND_H