• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 
16 #include "basic_array_string_plugin.h"
17 
18 #include "array_string_serializer.h"
19 #include "edm_log.h"
20 
21 namespace OHOS {
22 namespace EDM {
OnBasicSetPolicy(std::vector<std::string> & data,std::vector<std::string> & currentData,std::vector<std::string> & mergeData,int32_t userId)23 ErrCode BasicArrayStringPlugin::OnBasicSetPolicy(std::vector<std::string> &data, std::vector<std::string> &currentData,
24     std::vector<std::string> &mergeData, int32_t userId)
25 {
26     if (data.empty()) {
27         EDMLOGW("BasicArrayStringPlugin OnSetPolicy data is empty.");
28         return ERR_OK;
29     }
30     if (data.size() > maxListSize_) {
31         EDMLOGE("BasicArrayStringPlugin OnSetPolicy input data is too large.");
32         return EdmReturnErrCode::PARAM_ERROR;
33     }
34     std::vector<std::string> needAddData =
35         ArrayStringSerializer::GetInstance()->SetDifferencePolicyData(currentData, data);
36     std::vector<std::string> needAddMergeData =
37         ArrayStringSerializer::GetInstance()->SetDifferencePolicyData(mergeData, needAddData);
38     std::vector<std::string> afterHandle =
39         ArrayStringSerializer::GetInstance()->SetUnionPolicyData(currentData, needAddData);
40     std::vector<std::string> afterMerge =
41         ArrayStringSerializer::GetInstance()->SetUnionPolicyData(mergeData, afterHandle);
42     if (afterMerge.size() > maxListSize_) {
43         EDMLOGE("BasicArrayStringPlugin OnSetPolicy merge data is too large.");
44         return EdmReturnErrCode::PARAM_ERROR;
45     }
46 
47     std::vector<std::string> failedData;
48     if (!needAddMergeData.empty()) {
49         ErrCode ret = SetOtherModulePolicy(needAddMergeData, userId, failedData);
50         if (FAILED(ret)) {
51             return ret;
52         }
53     }
54     if (failedData.empty()) {
55         currentData = afterHandle;
56         mergeData = afterMerge;
57     } else {
58         currentData = ArrayStringSerializer::GetInstance()->SetDifferencePolicyData(failedData, afterHandle);
59         mergeData = ArrayStringSerializer::GetInstance()->SetDifferencePolicyData(failedData, afterMerge);
60     }
61     return ERR_OK;
62 }
63 
BasicGetPolicy(std::string & policyData,MessageParcel & data,MessageParcel & reply,int32_t userId)64 ErrCode BasicArrayStringPlugin::BasicGetPolicy(std::string &policyData, MessageParcel &data, MessageParcel &reply,
65     int32_t userId)
66 {
67     std::vector<std::string> policies;
68     ArrayStringSerializer::GetInstance()->Deserialize(policyData, policies);
69     reply.WriteInt32(ERR_OK);
70     reply.WriteStringVector(policies);
71     return ERR_OK;
72 }
73 
OnBasicRemovePolicy(std::vector<std::string> & data,std::vector<std::string> & currentData,std::vector<std::string> & mergeData,int32_t userId)74 ErrCode BasicArrayStringPlugin::OnBasicRemovePolicy(std::vector<std::string> &data,
75     std::vector<std::string> &currentData, std::vector<std::string> &mergeData, int32_t userId)
76 {
77     if (data.empty()) {
78         EDMLOGW("BasicArrayStringPlugin OnRemovePolicy data is empty.");
79         return ERR_OK;
80     }
81     if (data.size() > maxListSize_) {
82         EDMLOGE("BasicArrayStringPlugin OnRemovePolicy input data is too large.");
83         return EdmReturnErrCode::PARAM_ERROR;
84     }
85     std::vector<std::string> needRemovePolicy =
86         ArrayStringSerializer::GetInstance()->SetIntersectionPolicyData(data, currentData);
87     std::vector<std::string> needRemoveMergePolicy =
88         ArrayStringSerializer::GetInstance()->SetDifferencePolicyData(mergeData, needRemovePolicy);
89 
90     std::vector<std::string> failedData;
91     if (!needRemoveMergePolicy.empty()) {
92         ErrCode ret = RemoveOtherModulePolicy(needRemoveMergePolicy, userId, failedData);
93         if (FAILED(ret)) {
94             return ret;
95         }
96     }
97     if (failedData.empty()) {
98         currentData = ArrayStringSerializer::GetInstance()->SetDifferencePolicyData(needRemovePolicy, currentData);
99     } else {
100         auto removeData = ArrayStringSerializer::GetInstance()->SetDifferencePolicyData(failedData, needRemovePolicy);
101         currentData = ArrayStringSerializer::GetInstance()->SetDifferencePolicyData(removeData, currentData);
102     }
103     mergeData = ArrayStringSerializer::GetInstance()->SetUnionPolicyData(mergeData, currentData);
104     return ERR_OK;
105 }
106 
OnBasicAdminRemove(const std::string & adminName,std::vector<std::string> & data,std::vector<std::string> & mergeData,int32_t userId)107 ErrCode BasicArrayStringPlugin::OnBasicAdminRemove(const std::string &adminName, std::vector<std::string> &data,
108     std::vector<std::string> &mergeData, int32_t userId)
109 {
110     EDMLOGI("BasicArrayStringPlugin OnAdminRemove adminName : %{public}s", adminName.c_str());
111 
112     std::vector<std::string> needRemoveMergePolicy =
113         ArrayStringSerializer::GetInstance()->SetDifferencePolicyData(mergeData, data);
114 
115     std::vector<std::string> failedData;
116     return RemoveOtherModulePolicy(needRemoveMergePolicy, userId, failedData);
117 }
118 
SetOtherModulePolicy(const std::vector<std::string> & data,int32_t userId,std::vector<std::string> & failedData)119 ErrCode BasicArrayStringPlugin::SetOtherModulePolicy(const std::vector<std::string> &data, int32_t userId,
120     std::vector<std::string> &failedData)
121 {
122     return ERR_OK;
123 }
124 
RemoveOtherModulePolicy(const std::vector<std::string> & data,int32_t userId,std::vector<std::string> & failedData)125 ErrCode BasicArrayStringPlugin::RemoveOtherModulePolicy(const std::vector<std::string> &data, int32_t userId,
126     std::vector<std::string> &failedData)
127 {
128     return ERR_OK;
129 }
130 } // namespace EDM
131 } // namespace OHOS
132