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 "SystemCapability.h" 177c804472Sopenharmony_ci 187c804472Sopenharmony_ci#include <fstream> 197c804472Sopenharmony_ci 207c804472Sopenharmony_ci#include "CommandParser.h" 217c804472Sopenharmony_ci#include "FileSystem.h" 227c804472Sopenharmony_ci#include "PreviewerEngineLog.h" 237c804472Sopenharmony_ci#include "JsonReader.h" 247c804472Sopenharmony_ci 257c804472Sopenharmony_ciSystemCapability& SystemCapability::GetInstance() 267c804472Sopenharmony_ci{ 277c804472Sopenharmony_ci static SystemCapability instance; 287c804472Sopenharmony_ci return instance; 297c804472Sopenharmony_ci} 307c804472Sopenharmony_ci 317c804472Sopenharmony_cibool SystemCapability::HasSystemCapability(const char* sysCapName) 327c804472Sopenharmony_ci{ 337c804472Sopenharmony_ci std::string capName = sysCapName; 347c804472Sopenharmony_ci if (capabilities.find(sysCapName) == capabilities.end()) { 357c804472Sopenharmony_ci return false; 367c804472Sopenharmony_ci } 377c804472Sopenharmony_ci return capabilities[sysCapName]; 387c804472Sopenharmony_ci} 397c804472Sopenharmony_ci 407c804472Sopenharmony_ciSystemCapability::SystemCapability() 417c804472Sopenharmony_ci{ 427c804472Sopenharmony_ci ReadCapability(); 437c804472Sopenharmony_ci} 447c804472Sopenharmony_ci 457c804472Sopenharmony_civoid SystemCapability::ReadCapability() 467c804472Sopenharmony_ci{ 477c804472Sopenharmony_ci std::string separator = FileSystem::GetSeparator(); 487c804472Sopenharmony_ci std::string filePath = FileSystem::GetApplicationPath() + separator + ".." + separator + "config" + separator + 497c804472Sopenharmony_ci "system_capability.json"; 507c804472Sopenharmony_ci std::ifstream inFile(filePath); 517c804472Sopenharmony_ci if (!inFile.is_open()) { 527c804472Sopenharmony_ci ELOG("Open capability file failed."); 537c804472Sopenharmony_ci } 547c804472Sopenharmony_ci std::string jsonStr((std::istreambuf_iterator<char>(inFile)), std::istreambuf_iterator<char>()); 557c804472Sopenharmony_ci inFile.close(); 567c804472Sopenharmony_ci 577c804472Sopenharmony_ci Json2::Value val = JsonReader::ParseJsonData2(jsonStr); 587c804472Sopenharmony_ci if (val.IsNull()) { 597c804472Sopenharmony_ci std::string message = JsonReader::GetErrorPtr(); 607c804472Sopenharmony_ci ELOG("Failed to parse the capability, errors: %s", message.c_str()); 617c804472Sopenharmony_ci } 627c804472Sopenharmony_ci if (val["systemCapability"].IsNull() || !val["systemCapability"].IsArray()) { 637c804472Sopenharmony_ci ELOG("Empty systemCapability json object: %s", val["systemCapability"].ToStyledString().c_str()); 647c804472Sopenharmony_ci return; 657c804472Sopenharmony_ci } 667c804472Sopenharmony_ci Json2::Value val2 = val["systemCapability"]; 677c804472Sopenharmony_ci for (int i = 0; i < val2.GetArraySize(); i++) { 687c804472Sopenharmony_ci Json2::Value cap = val2.GetArrayItem(i); 697c804472Sopenharmony_ci if (!cap.IsMember("name") || !cap.IsMember("register-on-startup")) { 707c804472Sopenharmony_ci ELOG("Invalid systemCapability json object"); 717c804472Sopenharmony_ci } 727c804472Sopenharmony_ci if (!cap["register-on-startup"].IsBool()) { 737c804472Sopenharmony_ci ELOG("Invalid systemCapability json object"); 747c804472Sopenharmony_ci } 757c804472Sopenharmony_ci capabilities[cap["name"].AsString()] = cap["register"].AsBool(); 767c804472Sopenharmony_ci } 777c804472Sopenharmony_ci} 78