1c36cf2e9Sopenharmony_ci/*
2c36cf2e9Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3c36cf2e9Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c36cf2e9Sopenharmony_ci * you may not use this file except in compliance with the License.
5c36cf2e9Sopenharmony_ci * You may obtain a copy of the License at
6c36cf2e9Sopenharmony_ci *
7c36cf2e9Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8c36cf2e9Sopenharmony_ci *
9c36cf2e9Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c36cf2e9Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c36cf2e9Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c36cf2e9Sopenharmony_ci * See the License for the specific language governing permissions and
13c36cf2e9Sopenharmony_ci * limitations under the License.
14c36cf2e9Sopenharmony_ci */
15c36cf2e9Sopenharmony_ci
16c36cf2e9Sopenharmony_ciimport {Log} from '../utils/Log';
17c36cf2e9Sopenharmony_ciimport {GlobalThisStorageKey} from './GlobalThisStorageKey';
18c36cf2e9Sopenharmony_ci
19c36cf2e9Sopenharmony_ciconst TAG = 'GlobalThisHelper';
20c36cf2e9Sopenharmony_ci
21c36cf2e9Sopenharmony_ciexport class GlobalThisHelper {
22c36cf2e9Sopenharmony_ci  private static registerKeys = [
23c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_PRINT_ADAPTER,
24c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_MEDIA_SIZE_UTIL,
25c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_MAIN_ABILITY_CONTEXT,
26c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_MAIN_ABILITY_WINDOW_STAGE,
27c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_JOB_MANAGER_ABILITY_CONTEXT,
28c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_NOTIFICATION_PRINTER_NAME,
29c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_SERVICE_FIRST_START,
30c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_PRINTER_SELECT_DIALOG_OPEN,
31c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_CURRENT_PIXELMAP,
32c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_PREFERENCES_ADAPTER,
33c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_SECURITY_GUARD,
34c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_IMAGE_ERROR_COUNT,
35c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_IMAGE_ERROR_NAME,
36c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_ABILITY_CONTEXT,
37c36cf2e9Sopenharmony_ci    GlobalThisStorageKey.KEY_FILES_DIR
38c36cf2e9Sopenharmony_ci  ];
39c36cf2e9Sopenharmony_ci
40c36cf2e9Sopenharmony_ci  /**
41c36cf2e9Sopenharmony_ci   * 将变量value挂载到globalThis实例上,key需要先注册到registerKeys,否则挂载失败
42c36cf2e9Sopenharmony_ci   * 注意本接口可保存原对象
43c36cf2e9Sopenharmony_ci   *
44c36cf2e9Sopenharmony_ci   * @param value 变量值
45c36cf2e9Sopenharmony_ci   * @param storageKey 保存的key值
46c36cf2e9Sopenharmony_ci   * @param forceChange
47c36cf2e9Sopenharmony_ci   * @returns 挂载成功返回value,失败返回undefined
48c36cf2e9Sopenharmony_ci   */
49c36cf2e9Sopenharmony_ci  public static createValue<T>(value: T, storageKey: string, forceChange: boolean = false): T {
50c36cf2e9Sopenharmony_ci    const element = GlobalThisHelper.registerKeys.find((ele) => ele === storageKey);
51c36cf2e9Sopenharmony_ci    if (element === undefined) {
52c36cf2e9Sopenharmony_ci      Log.error(TAG, 'Can not find register storageKey: ' + JSON.stringify(storageKey));
53c36cf2e9Sopenharmony_ci      return undefined;
54c36cf2e9Sopenharmony_ci    }
55c36cf2e9Sopenharmony_ci    if ((globalThis[storageKey] === undefined) || forceChange) {
56c36cf2e9Sopenharmony_ci      globalThis[storageKey] = value;
57c36cf2e9Sopenharmony_ci      Log.error(TAG, 'GlobalThisHelper Create key of ' + JSON.stringify(storageKey));
58c36cf2e9Sopenharmony_ci    }
59c36cf2e9Sopenharmony_ci    return <T>(globalThis[storageKey]);
60c36cf2e9Sopenharmony_ci  }
61c36cf2e9Sopenharmony_ci
62c36cf2e9Sopenharmony_ci  /**
63c36cf2e9Sopenharmony_ci   * 将变量value挂载到AppStorage实例上,key需要先注册到registerKeys,否则挂载失败
64c36cf2e9Sopenharmony_ci   * 注意本接口重新new了一个新对象,如需保存原对象不要使用本接口
65c36cf2e9Sopenharmony_ci   *
66c36cf2e9Sopenharmony_ci   * @returns 挂载成功返回value,失败返回undefined
67c36cf2e9Sopenharmony_ci   */
68c36cf2e9Sopenharmony_ci  public static createObject<T>(objectClass: { new(...input): T }, storageKey: string, ...input): T {
69c36cf2e9Sopenharmony_ci    const element = GlobalThisHelper.registerKeys.find((ele) => ele === storageKey);
70c36cf2e9Sopenharmony_ci    if (element === undefined) {
71c36cf2e9Sopenharmony_ci      Log.error(TAG, 'Can not find register storageKey: ' + JSON.stringify(storageKey));
72c36cf2e9Sopenharmony_ci      return undefined;
73c36cf2e9Sopenharmony_ci    }
74c36cf2e9Sopenharmony_ci    if (globalThis[storageKey] === undefined) {
75c36cf2e9Sopenharmony_ci      globalThis[storageKey] = new objectClass(...input);
76c36cf2e9Sopenharmony_ci      Log.error(TAG, 'GlobalThisHelper Create key of ' + JSON.stringify(storageKey));
77c36cf2e9Sopenharmony_ci    }
78c36cf2e9Sopenharmony_ci
79c36cf2e9Sopenharmony_ci    // 通过globalThis存取值
80c36cf2e9Sopenharmony_ci    return (globalThis[storageKey] as T);
81c36cf2e9Sopenharmony_ci  }
82c36cf2e9Sopenharmony_ci
83c36cf2e9Sopenharmony_ci  /**
84c36cf2e9Sopenharmony_ci   * 获取挂载到globalThis上的全局变量
85c36cf2e9Sopenharmony_ci   *
86c36cf2e9Sopenharmony_ci   * @returns 成功返回value,若之前未挂载则返回undefined
87c36cf2e9Sopenharmony_ci   */
88c36cf2e9Sopenharmony_ci  public static getValue<T>(storageKey: string): T {
89c36cf2e9Sopenharmony_ci    if (globalThis[storageKey] === undefined) {
90c36cf2e9Sopenharmony_ci      Log.error(TAG, 'The storageKey is not exist, key = ' + storageKey);
91c36cf2e9Sopenharmony_ci      return undefined;
92c36cf2e9Sopenharmony_ci    }
93c36cf2e9Sopenharmony_ci    return (globalThis[storageKey] as T);
94c36cf2e9Sopenharmony_ci  }
95c36cf2e9Sopenharmony_ci}