• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 package ohos;
16 
17 import java.util.Collections;
18 import java.util.List;
19 
20 /**
21  * Collections of method for HQF verify.
22  *
23  */
24 class HQFVerify {
25     private static final Log LOG = new Log(HQFVerify.class.toString());
26 
27     /**
28      * check hqf is valid.
29      *
30      * @param hqfVerifyInfos is the collection of hqf infos
31      * @return the result
32      */
checkHQFIsValid(List<HQFInfo> hqfVerifyInfos)33     public static boolean checkHQFIsValid(List<HQFInfo> hqfVerifyInfos) {
34         // check app fields
35         if (hqfVerifyInfos.isEmpty()) {
36             LOG.error("input hqf file is empty.");
37             return false;
38         }
39         if (!checkAppFields(hqfVerifyInfos)) {
40             LOG.error("input hqf file has different fields in app.");
41             return false;
42         }
43         if (!checkModuleIsValid(hqfVerifyInfos)) {
44             LOG.error("input hqf file moduleName is invalid.");
45             return false;
46         }
47         return true;
48     }
49 
50     /**
51      * check hqf has same app fields.
52      *
53      * @param hqfVerifyInfos is the collection of hqf infos
54      * @return the result
55      */
checkAppFields(List<HQFInfo> hqfVerifyInfos)56     private static boolean checkAppFields(List<HQFInfo> hqfVerifyInfos) {
57         String bundleName = hqfVerifyInfos.get(0).getBundleName();
58         int versionCode = hqfVerifyInfos.get(0).getVersionCode();
59         String versionName = hqfVerifyInfos.get(0).getVersionName();
60         int patchVersionCode = hqfVerifyInfos.get(0).getPatchVersionCode();
61         String patchVersionName = hqfVerifyInfos.get(0).getPatchVersionName();
62         for (HQFInfo hqfVerifyInfo : hqfVerifyInfos) {
63             if (bundleName == null || !bundleName.equals(hqfVerifyInfo.getBundleName())) {
64                 LOG.error("input hqf file has different bundleName.");
65                 return false;
66             }
67             if (versionCode != hqfVerifyInfo.getVersionCode()) {
68                 LOG.error("input hqf file has different versionCode.");
69                 return false;
70             }
71             if (versionName == null || !versionName.equals(hqfVerifyInfo.getVersionName())) {
72                 LOG.error("input hqf file has different versionName.");
73                 return false;
74             }
75             if (patchVersionCode != hqfVerifyInfo.getPatchVersionCode()) {
76                 LOG.error("input hqf file has different patchVersionCode.");
77                 return false;
78             }
79             if (patchVersionName == null || !patchVersionName.equals(hqfVerifyInfo.getPatchVersionName())) {
80                 LOG.error("input hqf file has different patchVersionName.");
81                 return false;
82             }
83         }
84         return true;
85     }
86 
87     /**
88      * check hqf module is valid.
89      *
90      * @param hqfVerifyInfos is the collection of hqf infos
91      * @return the result
92      */
checkModuleIsValid(List<HQFInfo> hqfVerifyInfos)93     private static boolean checkModuleIsValid(List<HQFInfo> hqfVerifyInfos) {
94         for (int i = 0; i < hqfVerifyInfos.size(); ++i) {
95             for (int j = i + 1; j < hqfVerifyInfos.size(); ++j) {
96                 if (checkModuleIsDuplicated(hqfVerifyInfos.get(i), hqfVerifyInfos.get(j))) {
97                     LOG.error("input hqf file moduleName duplicated.");
98                     return false;
99                 }
100             }
101         }
102 
103         return true;
104     }
105 
106     /**
107      * check module name duplicated.
108      *
109      * @param hqfVerifyInfoLeft is one HQFVerifyInfo
110      * @param hqfVerifyInfoRight is another HQFVerifyInfo
111      * @return the result
112      */
checkModuleIsDuplicated(HQFInfo hqfVerifyInfoLeft, HQFInfo hqfVerifyInfoRight)113     private static boolean checkModuleIsDuplicated(HQFInfo hqfVerifyInfoLeft, HQFInfo hqfVerifyInfoRight) {
114         if (!hqfVerifyInfoLeft.getModuleName().equals(hqfVerifyInfoRight.getModuleName())) {
115             return false;
116         }
117         if (Collections.disjoint(hqfVerifyInfoLeft.getDeviceTypes(), hqfVerifyInfoRight.getDeviceTypes())) {
118             return false;
119         }
120         return true;
121     }
122 }
123