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> ¤tData,
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> ¤tData, 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