1eace7efcSopenharmony_ci/* 2eace7efcSopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 3eace7efcSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4eace7efcSopenharmony_ci * you may not use this file except in compliance with the License. 5eace7efcSopenharmony_ci * You may obtain a copy of the License at 6eace7efcSopenharmony_ci * 7eace7efcSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8eace7efcSopenharmony_ci * 9eace7efcSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10eace7efcSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11eace7efcSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12eace7efcSopenharmony_ci * See the License for the specific language governing permissions and 13eace7efcSopenharmony_ci * limitations under the License. 14eace7efcSopenharmony_ci */ 15eace7efcSopenharmony_ci 16eace7efcSopenharmony_ci#include "inner_mission_info.h" 17eace7efcSopenharmony_ci 18eace7efcSopenharmony_ci#include "hilog_tag_wrapper.h" 19eace7efcSopenharmony_ci 20eace7efcSopenharmony_cinamespace OHOS { 21eace7efcSopenharmony_cinamespace AAFwk { 22eace7efcSopenharmony_cinamespace { 23eace7efcSopenharmony_ciconst std::string KEY_MISSION_NAME = "MissionName"; 24eace7efcSopenharmony_ciconst std::string KEY_LAUNCH_MODE = "LaunchMode"; 25eace7efcSopenharmony_ciconst std::string KEY_MISSION_ID = "MissionId"; 26eace7efcSopenharmony_ciconst std::string KEY_RUNNING_STATE = "RunningState"; 27eace7efcSopenharmony_ciconst std::string KEY_LOCKED_STATE = "LockedState"; 28eace7efcSopenharmony_ciconst std::string KEY_CONTINUABLE = "Continuable"; 29eace7efcSopenharmony_ciconst std::string KEY_TIME = "Time"; 30eace7efcSopenharmony_ciconst std::string KEY_LABEL = "Label"; 31eace7efcSopenharmony_ciconst std::string KEY_ICON_PATH = "IconPath"; 32eace7efcSopenharmony_ciconst std::string KEY_WANT = "Want"; 33eace7efcSopenharmony_ciconst std::string KEY_START_METHOD = "StartMethod"; 34eace7efcSopenharmony_ciconst std::string KEY_BUNDLE_NAME = "BundleName"; 35eace7efcSopenharmony_ciconst std::string KEY_UID = "Uid"; 36eace7efcSopenharmony_ciconst std::string KEY_IS_TEMPORARY = "IsTemporary"; 37eace7efcSopenharmony_ciconst std::string KEY_SPEC_FLAG = "SpecFlag"; 38eace7efcSopenharmony_ciconst std::string KEY_HAS_RECONER_INFO = "hasRecoverInfo"; 39eace7efcSopenharmony_ci} 40eace7efcSopenharmony_cistd::string InnerMissionInfo::ToJsonStr() const 41eace7efcSopenharmony_ci{ 42eace7efcSopenharmony_ci nlohmann::json value; 43eace7efcSopenharmony_ci value[KEY_MISSION_NAME] = missionName; 44eace7efcSopenharmony_ci value[KEY_LAUNCH_MODE] = launchMode; 45eace7efcSopenharmony_ci value[KEY_IS_TEMPORARY] = isTemporary; 46eace7efcSopenharmony_ci value[KEY_BUNDLE_NAME] = bundleName; 47eace7efcSopenharmony_ci value[KEY_START_METHOD] = startMethod; 48eace7efcSopenharmony_ci value[KEY_UID] = uid; 49eace7efcSopenharmony_ci value[KEY_SPEC_FLAG] = specifiedFlag; 50eace7efcSopenharmony_ci value[KEY_MISSION_ID] = missionInfo.id; 51eace7efcSopenharmony_ci value[KEY_RUNNING_STATE] = missionInfo.runningState; 52eace7efcSopenharmony_ci value[KEY_LOCKED_STATE] = missionInfo.lockedState; 53eace7efcSopenharmony_ci value[KEY_CONTINUABLE] = missionInfo.continuable; 54eace7efcSopenharmony_ci value[KEY_TIME] = missionInfo.time; 55eace7efcSopenharmony_ci value[KEY_LABEL] = missionInfo.label; 56eace7efcSopenharmony_ci value[KEY_ICON_PATH] = missionInfo.iconPath; 57eace7efcSopenharmony_ci value[KEY_WANT] = missionInfo.want.ToUri(); 58eace7efcSopenharmony_ci value[KEY_HAS_RECONER_INFO] = hasRecoverInfo; 59eace7efcSopenharmony_ci 60eace7efcSopenharmony_ci return value.dump(); 61eace7efcSopenharmony_ci} 62eace7efcSopenharmony_ci 63eace7efcSopenharmony_cibool InnerMissionInfo::FromJsonStr(const std::string &jsonStr) 64eace7efcSopenharmony_ci{ 65eace7efcSopenharmony_ci // Do not throw exceptions in nlohmann::json::parse 66eace7efcSopenharmony_ci if (jsonStr.empty()) { 67eace7efcSopenharmony_ci return false; 68eace7efcSopenharmony_ci } 69eace7efcSopenharmony_ci nlohmann::json value = nlohmann::json::parse(jsonStr, nullptr, false); 70eace7efcSopenharmony_ci if (value.is_discarded()) { 71eace7efcSopenharmony_ci TAG_LOGE(AAFwkTag::ABILITYMGR, "json failed: %{private}s", jsonStr.c_str()); 72eace7efcSopenharmony_ci return false; 73eace7efcSopenharmony_ci } 74eace7efcSopenharmony_ci 75eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_MISSION_NAME, JsonType::STRING)) { 76eace7efcSopenharmony_ci return false; 77eace7efcSopenharmony_ci } 78eace7efcSopenharmony_ci missionName = value[KEY_MISSION_NAME].get<std::string>(); 79eace7efcSopenharmony_ci 80eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_LAUNCH_MODE, JsonType::NUMBER)) { 81eace7efcSopenharmony_ci return false; 82eace7efcSopenharmony_ci } 83eace7efcSopenharmony_ci launchMode = value[KEY_LAUNCH_MODE].get<int32_t>(); 84eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_IS_TEMPORARY, JsonType::BOOLEAN)) { 85eace7efcSopenharmony_ci return false; 86eace7efcSopenharmony_ci } 87eace7efcSopenharmony_ci isTemporary = value[KEY_IS_TEMPORARY].get<bool>(); 88eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_START_METHOD, JsonType::NUMBER)) { 89eace7efcSopenharmony_ci return false; 90eace7efcSopenharmony_ci } 91eace7efcSopenharmony_ci startMethod = value[KEY_START_METHOD].get<int32_t>(); 92eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_BUNDLE_NAME, JsonType::STRING)) { 93eace7efcSopenharmony_ci return false; 94eace7efcSopenharmony_ci } 95eace7efcSopenharmony_ci bundleName = value[KEY_BUNDLE_NAME].get<std::string>(); 96eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_UID, JsonType::NUMBER)) { 97eace7efcSopenharmony_ci return false; 98eace7efcSopenharmony_ci } 99eace7efcSopenharmony_ci uid = value[KEY_UID].get<int32_t>(); 100eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_SPEC_FLAG, JsonType::STRING)) { 101eace7efcSopenharmony_ci return false; 102eace7efcSopenharmony_ci } 103eace7efcSopenharmony_ci specifiedFlag = value[KEY_SPEC_FLAG].get<std::string>(); 104eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_MISSION_ID, JsonType::NUMBER)) { 105eace7efcSopenharmony_ci return false; 106eace7efcSopenharmony_ci } 107eace7efcSopenharmony_ci missionInfo.id = value[KEY_MISSION_ID].get<int32_t>(); 108eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_RUNNING_STATE, JsonType::NUMBER)) { 109eace7efcSopenharmony_ci return false; 110eace7efcSopenharmony_ci } 111eace7efcSopenharmony_ci missionInfo.runningState = value[KEY_RUNNING_STATE].get<int32_t>(); 112eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_LOCKED_STATE, JsonType::BOOLEAN)) { 113eace7efcSopenharmony_ci return false; 114eace7efcSopenharmony_ci } 115eace7efcSopenharmony_ci missionInfo.lockedState = value[KEY_LOCKED_STATE].get<bool>(); 116eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_CONTINUABLE, JsonType::BOOLEAN)) { 117eace7efcSopenharmony_ci return false; 118eace7efcSopenharmony_ci } 119eace7efcSopenharmony_ci missionInfo.continuable = value[KEY_CONTINUABLE].get<bool>(); 120eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_TIME, JsonType::STRING)) { 121eace7efcSopenharmony_ci return false; 122eace7efcSopenharmony_ci } 123eace7efcSopenharmony_ci missionInfo.time = value[KEY_TIME].get<std::string>(); 124eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_LABEL, JsonType::STRING)) { 125eace7efcSopenharmony_ci return false; 126eace7efcSopenharmony_ci } 127eace7efcSopenharmony_ci missionInfo.label = value[KEY_LABEL].get<std::string>(); 128eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_ICON_PATH, JsonType::STRING)) { 129eace7efcSopenharmony_ci return false; 130eace7efcSopenharmony_ci } 131eace7efcSopenharmony_ci missionInfo.iconPath = value[KEY_ICON_PATH].get<std::string>(); 132eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_WANT, JsonType::STRING)) { 133eace7efcSopenharmony_ci return false; 134eace7efcSopenharmony_ci } 135eace7efcSopenharmony_ci if (!CheckJsonNode(value, KEY_HAS_RECONER_INFO, JsonType::BOOLEAN)) { 136eace7efcSopenharmony_ci return false; 137eace7efcSopenharmony_ci } 138eace7efcSopenharmony_ci hasRecoverInfo = value[KEY_HAS_RECONER_INFO].get<bool>(); 139eace7efcSopenharmony_ci Want* want = Want::ParseUri(value[KEY_WANT].get<std::string>()); 140eace7efcSopenharmony_ci if (want) { 141eace7efcSopenharmony_ci missionInfo.want = *want; 142eace7efcSopenharmony_ci } 143eace7efcSopenharmony_ci return true; 144eace7efcSopenharmony_ci} 145eace7efcSopenharmony_ci 146eace7efcSopenharmony_civoid InnerMissionInfo::Dump(std::vector<std::string> &info) const 147eace7efcSopenharmony_ci{ 148eace7efcSopenharmony_ci std::string dumpInfo = " Mission ID #" + std::to_string(missionInfo.id); 149eace7efcSopenharmony_ci info.push_back(dumpInfo); 150eace7efcSopenharmony_ci dumpInfo = " mission name [" + missionName + "]"; 151eace7efcSopenharmony_ci info.push_back(dumpInfo); 152eace7efcSopenharmony_ci dumpInfo = " runningState [" + std::to_string(missionInfo.runningState) + "]"; 153eace7efcSopenharmony_ci info.push_back(dumpInfo); 154eace7efcSopenharmony_ci dumpInfo = " lockedState [" + std::to_string(missionInfo.lockedState) + "]"; 155eace7efcSopenharmony_ci info.push_back(dumpInfo); 156eace7efcSopenharmony_ci dumpInfo = " continuable [" + std::to_string(missionInfo.continuable) + "]"; 157eace7efcSopenharmony_ci info.push_back(dumpInfo); 158eace7efcSopenharmony_ci dumpInfo = " timeStamp [" + missionInfo.time + "]"; 159eace7efcSopenharmony_ci info.push_back(dumpInfo); 160eace7efcSopenharmony_ci dumpInfo = " label [" + missionInfo.label + "]"; 161eace7efcSopenharmony_ci info.push_back(dumpInfo); 162eace7efcSopenharmony_ci dumpInfo = " iconPath [" + missionInfo.iconPath + "]"; 163eace7efcSopenharmony_ci info.push_back(dumpInfo); 164eace7efcSopenharmony_ci dumpInfo = " want [" + missionInfo.want.ToUri() + "]"; 165eace7efcSopenharmony_ci info.push_back(dumpInfo); 166eace7efcSopenharmony_ci} 167eace7efcSopenharmony_ci 168eace7efcSopenharmony_cibool InnerMissionInfo::CheckJsonNode(nlohmann::json &value, const std::string &node, JsonType jsonType) 169eace7efcSopenharmony_ci{ 170eace7efcSopenharmony_ci if (value.find(node) == value.end()) { 171eace7efcSopenharmony_ci TAG_LOGE(AAFwkTag::ABILITYMGR, "node %{private}s null", node.c_str()); 172eace7efcSopenharmony_ci return false; 173eace7efcSopenharmony_ci } 174eace7efcSopenharmony_ci 175eace7efcSopenharmony_ci if (jsonType == JsonType::NUMBER) { 176eace7efcSopenharmony_ci return value[node].is_number(); 177eace7efcSopenharmony_ci } 178eace7efcSopenharmony_ci if (jsonType == JsonType::STRING) { 179eace7efcSopenharmony_ci return value[node].is_string(); 180eace7efcSopenharmony_ci } 181eace7efcSopenharmony_ci if (jsonType == JsonType::BOOLEAN) { 182eace7efcSopenharmony_ci return value[node].is_boolean(); 183eace7efcSopenharmony_ci } 184eace7efcSopenharmony_ci return false; 185eace7efcSopenharmony_ci} 186eace7efcSopenharmony_ci} // namespace AAFwk 187eace7efcSopenharmony_ci} // namespace OHOS 188