13920e296Sopenharmony_ci/*
23920e296Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
33920e296Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43920e296Sopenharmony_ci * you may not use this file except in compliance with the License.
53920e296Sopenharmony_ci * You may obtain a copy of the License at
63920e296Sopenharmony_ci *
73920e296Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
83920e296Sopenharmony_ci *
93920e296Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103920e296Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113920e296Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123920e296Sopenharmony_ci * See the License for the specific language governing permissions and
133920e296Sopenharmony_ci * limitations under the License.
143920e296Sopenharmony_ci */
153920e296Sopenharmony_ci
163920e296Sopenharmony_ci#include "resource_merge.h"
173920e296Sopenharmony_ci#include "cmd_parser.h"
183920e296Sopenharmony_ci#include "file_entry.h"
193920e296Sopenharmony_ci
203920e296Sopenharmony_cinamespace OHOS {
213920e296Sopenharmony_cinamespace Global {
223920e296Sopenharmony_cinamespace Restool {
233920e296Sopenharmony_ciusing namespace std;
243920e296Sopenharmony_ciconst vector<ConfigParser::ModuleType> ResourceMerge::ORDERS = {
253920e296Sopenharmony_ci    ConfigParser::ModuleType::NONE,
263920e296Sopenharmony_ci    ConfigParser::ModuleType::ENTRY,
273920e296Sopenharmony_ci    ConfigParser::ModuleType::FEATURE,
283920e296Sopenharmony_ci    ConfigParser::ModuleType::SHARED,
293920e296Sopenharmony_ci    ConfigParser::ModuleType::HAR
303920e296Sopenharmony_ci};
313920e296Sopenharmony_ci
323920e296Sopenharmony_ciResourceMerge::ResourceMerge()
333920e296Sopenharmony_ci{
343920e296Sopenharmony_ci}
353920e296Sopenharmony_ci
363920e296Sopenharmony_ciResourceMerge::~ResourceMerge()
373920e296Sopenharmony_ci{
383920e296Sopenharmony_ci}
393920e296Sopenharmony_ci
403920e296Sopenharmony_ciuint32_t ResourceMerge::Init()
413920e296Sopenharmony_ci{
423920e296Sopenharmony_ci    auto &cmdParser = CmdParser<PackageParser>::GetInstance().GetCmdParser();
433920e296Sopenharmony_ci    const vector<string> &inputs = cmdParser.GetInputs();
443920e296Sopenharmony_ci    if (cmdParser.IsFileList()) {
453920e296Sopenharmony_ci        inputsOrder_ = inputs;
463920e296Sopenharmony_ci        return RESTOOL_SUCCESS;
473920e296Sopenharmony_ci    }
483920e296Sopenharmony_ci
493920e296Sopenharmony_ci    map<ConfigParser::ModuleType, vector<string>> inputTypes;
503920e296Sopenharmony_ci    for (auto it = inputs.crbegin(); it != inputs.crend(); it++) {
513920e296Sopenharmony_ci        string configPath = ResourceUtil::GetMainPath(*it).Append(ConfigParser::GetConfigName()).GetPath();
523920e296Sopenharmony_ci        string resourceDir = FileEntry::FilePath(*it).GetPath();
533920e296Sopenharmony_ci        ConfigParser::ModuleType moduleType = ConfigParser::ModuleType::NONE;
543920e296Sopenharmony_ci        if (!ResourceUtil::FileExist(configPath)) {
553920e296Sopenharmony_ci            inputTypes[moduleType].push_back(resourceDir);
563920e296Sopenharmony_ci            continue;
573920e296Sopenharmony_ci        }
583920e296Sopenharmony_ci        ConfigParser configParser(configPath);
593920e296Sopenharmony_ci        if (configParser.Init() != RESTOOL_SUCCESS) {
603920e296Sopenharmony_ci            return RESTOOL_ERROR;
613920e296Sopenharmony_ci        }
623920e296Sopenharmony_ci        moduleType = configParser.GetModuleType();
633920e296Sopenharmony_ci        inputTypes[moduleType].push_back(resourceDir);
643920e296Sopenharmony_ci    }
653920e296Sopenharmony_ci
663920e296Sopenharmony_ci    for (const auto &type : ORDERS) {
673920e296Sopenharmony_ci        if (inputTypes.find(type) == inputTypes.end()) {
683920e296Sopenharmony_ci            continue;
693920e296Sopenharmony_ci        }
703920e296Sopenharmony_ci        inputsOrder_.insert(inputsOrder_.end(), inputTypes[type].begin(), inputTypes[type].end());
713920e296Sopenharmony_ci    }
723920e296Sopenharmony_ci    return RESTOOL_SUCCESS;
733920e296Sopenharmony_ci}
743920e296Sopenharmony_ci
753920e296Sopenharmony_ciconst vector<string> &ResourceMerge::GetInputs() const
763920e296Sopenharmony_ci{
773920e296Sopenharmony_ci    return inputsOrder_;
783920e296Sopenharmony_ci}
793920e296Sopenharmony_ci}
803920e296Sopenharmony_ci}
813920e296Sopenharmony_ci}