142365ec6Sopenharmony_ci/* 242365ec6Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 342365ec6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 442365ec6Sopenharmony_ci * you may not use this file except in compliance with the License. 542365ec6Sopenharmony_ci * You may obtain a copy of the License at 642365ec6Sopenharmony_ci * 742365ec6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 842365ec6Sopenharmony_ci * 942365ec6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1042365ec6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1142365ec6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1242365ec6Sopenharmony_ci * See the License for the specific language governing permissions and 1342365ec6Sopenharmony_ci * limitations under the License. 1442365ec6Sopenharmony_ci */ 1542365ec6Sopenharmony_ci 1642365ec6Sopenharmony_ciimport { Log } from '../utils/Log' 1742365ec6Sopenharmony_ciimport type { IModeMap } from './IModeMap' 1842365ec6Sopenharmony_ciimport type { FunctionId } from './FunctionId' 1942365ec6Sopenharmony_ci 2042365ec6Sopenharmony_ciexport class ModeAssembler { 2142365ec6Sopenharmony_ci private TAG: string = '[ModeAssembler]:' 2242365ec6Sopenharmony_ci private mNeedAdd: FunctionId[] 2342365ec6Sopenharmony_ci private mNeedDelete: FunctionId[] 2442365ec6Sopenharmony_ci private mMode: IModeMap 2542365ec6Sopenharmony_ci private mFunctionsMap: Map<FunctionId, any> 2642365ec6Sopenharmony_ci 2742365ec6Sopenharmony_ci constructor(functionsMap: Map<FunctionId, any>, modeMap: IModeMap) { 2842365ec6Sopenharmony_ci this.mFunctionsMap = functionsMap 2942365ec6Sopenharmony_ci this.mMode = modeMap 3042365ec6Sopenharmony_ci } 3142365ec6Sopenharmony_ci 3242365ec6Sopenharmony_ci public assembler(preMode: string, currentMode: string): void { 3342365ec6Sopenharmony_ci Log.info(`${this.TAG} assembler preMode = ${preMode} currentMode = ${currentMode} E `) 3442365ec6Sopenharmony_ci this.mNeedAdd = [] 3542365ec6Sopenharmony_ci this.mNeedDelete = [] 3642365ec6Sopenharmony_ci Log.info(`${this.TAG} assembler preMode = ${this.mMode.getFunctions(preMode)} currentMode = ${this.mMode.getFunctions(currentMode)} E `) 3742365ec6Sopenharmony_ci 3842365ec6Sopenharmony_ci let preModeFun: FunctionId[] = this.mMode.getFunctions(preMode) 3942365ec6Sopenharmony_ci let currentModeFun: FunctionId[] = this.mMode.getFunctions(currentMode) 4042365ec6Sopenharmony_ci 4142365ec6Sopenharmony_ci Log.info(`${this.TAG} assembler preModeFun = ${preModeFun} currentModeFun = ${currentModeFun} `) 4242365ec6Sopenharmony_ci if (!preMode) { 4342365ec6Sopenharmony_ci this.mNeedAdd = JSON.parse(JSON.stringify(currentModeFun)) 4442365ec6Sopenharmony_ci } else if (preMode != currentMode) { 4542365ec6Sopenharmony_ci this.mNeedAdd = JSON.parse(JSON.stringify(currentModeFun)) 4642365ec6Sopenharmony_ci for (let fun of preModeFun) { 4742365ec6Sopenharmony_ci let index = currentModeFun.indexOf(fun) 4842365ec6Sopenharmony_ci if (index == -1) { 4942365ec6Sopenharmony_ci this.mNeedDelete.push(fun) 5042365ec6Sopenharmony_ci } else { 5142365ec6Sopenharmony_ci this.mNeedAdd.splice(index, 1) 5242365ec6Sopenharmony_ci } 5342365ec6Sopenharmony_ci } 5442365ec6Sopenharmony_ci } 5542365ec6Sopenharmony_ci Log.info(`${this.TAG} assembler mNeedAdd = ${this.mNeedAdd} mNeedDelete = ${this.mNeedDelete}`) 5642365ec6Sopenharmony_ci this.attachFunction(this.mNeedAdd) 5742365ec6Sopenharmony_ci this.detachFunction(this.mNeedDelete) 5842365ec6Sopenharmony_ci Log.info(`${this.TAG} assembler X`) 5942365ec6Sopenharmony_ci } 6042365ec6Sopenharmony_ci 6142365ec6Sopenharmony_ci private attachFunction(item: FunctionId[]): void { 6242365ec6Sopenharmony_ci for (let fun of item) { 6342365ec6Sopenharmony_ci Log.info(`${this.TAG} attachFunction fun: ${fun}`) 6442365ec6Sopenharmony_ci this.mFunctionsMap.get(fun).load() 6542365ec6Sopenharmony_ci } 6642365ec6Sopenharmony_ci } 6742365ec6Sopenharmony_ci 6842365ec6Sopenharmony_ci private detachFunction(item: FunctionId[]): void { 6942365ec6Sopenharmony_ci for (let fun of item) { 7042365ec6Sopenharmony_ci Log.info(`${this.TAG} disattachFunction fun: ${fun}`) 7142365ec6Sopenharmony_ci this.mFunctionsMap.get(fun).unload() 7242365ec6Sopenharmony_ci } 7342365ec6Sopenharmony_ci } 7442365ec6Sopenharmony_ci}