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 "parse_util.h"
17 #include "system_ability_ondemand_reason.h"
18 
19 namespace OHOS {
OnDemandReasonExtraData(int32_t code,const std::string & data,const std::map<std::string,std::string> & want)20 OnDemandReasonExtraData::OnDemandReasonExtraData(int32_t code, const std::string& data,
21     const std::map<std::string, std::string>& want)
22 {
23     code_ = code;
24     data_ = data;
25     want_ = want;
26 }
27 
GetData() const28 std::string OnDemandReasonExtraData::GetData() const
29 {
30     return data_;
31 }
32 
GetCode() const33 int32_t OnDemandReasonExtraData::GetCode() const
34 {
35     return code_;
36 }
37 
GetWant() const38 const std::map<std::string, std::string>& OnDemandReasonExtraData::GetWant() const
39 {
40     return want_;
41 }
42 
Marshalling(Parcel & parcel) const43 bool OnDemandReasonExtraData::Marshalling(Parcel& parcel) const
44 {
45     if (!parcel.WriteInt32(code_)) {
46         return false;
47     }
48     if (!parcel.WriteString(data_)) {
49         return false;
50     }
51     nlohmann::json payload;
52     for (auto it = want_.begin(); it != want_.end(); ++it) {
53         payload[it->first] = it->second;
54     }
55     if (!parcel.WriteString(payload.dump())) {
56         return false;
57     }
58     return true;
59 }
60 
Unmarshalling(Parcel & parcel)61 OnDemandReasonExtraData *OnDemandReasonExtraData::Unmarshalling(Parcel& parcel)
62 {
63     int32_t code = 0;
64     if (!parcel.ReadInt32(code)) {
65         return nullptr;
66     }
67     std::string data;
68     if (!parcel.ReadString(data)) {
69         return nullptr;
70     }
71     std::map<std::string, std::string> want;
72     nlohmann::json payload = ParseUtil::StringToJsonObj(parcel.ReadString());
73     for (nlohmann::json::iterator it = payload.begin(); it != payload.end(); ++it) {
74         if (it.value().is_string()) {
75             want[it.key()] = it.value();
76         }
77     }
78     OnDemandReasonExtraData* extraData = new OnDemandReasonExtraData(code, data, want);
79     return extraData;
80 }
81 
SystemAbilityOnDemandReason(OnDemandReasonId reasonId,const std::string & reasonName,const std::string & reasonValue,int64_t extraDataId)82 SystemAbilityOnDemandReason::SystemAbilityOnDemandReason(OnDemandReasonId reasonId, const std::string& reasonName,
83     const std::string& reasonValue, int64_t extraDataId)
84 {
85     reasonId_ = reasonId;
86     reasonName_ = reasonName;
87     reasonValue_ = reasonValue;
88     extraDataId_ = extraDataId;
89 }
90 
SetId(OnDemandReasonId reasonId)91 void SystemAbilityOnDemandReason::SetId(OnDemandReasonId reasonId)
92 {
93     reasonId_ = reasonId;
94 }
95 
GetId() const96 OnDemandReasonId SystemAbilityOnDemandReason::GetId() const
97 {
98     return reasonId_;
99 }
100 
SetName(const std::string & reasonName)101 void SystemAbilityOnDemandReason::SetName(const std::string& reasonName)
102 {
103     reasonName_ = reasonName;
104 }
105 
GetName() const106 std::string SystemAbilityOnDemandReason::GetName() const
107 {
108     return reasonName_;
109 }
110 
SetValue(const std::string & reasonValue)111 void SystemAbilityOnDemandReason::SetValue(const std::string& reasonValue)
112 {
113     reasonValue_ = reasonValue;
114 }
115 
GetValue() const116 std::string SystemAbilityOnDemandReason::GetValue() const
117 {
118     return reasonValue_;
119 }
120 
SetExtraDataId(int64_t extraDataId)121 void SystemAbilityOnDemandReason::SetExtraDataId(int64_t extraDataId)
122 {
123     extraDataId_ = extraDataId;
124 }
125 
GetExtraDataId() const126 int64_t SystemAbilityOnDemandReason::GetExtraDataId() const
127 {
128     return extraDataId_;
129 }
130 
HasExtraData() const131 bool SystemAbilityOnDemandReason::HasExtraData() const
132 {
133     return reasonId_ == OnDemandReasonId::COMMON_EVENT;
134 }
135 
SetExtraData(OnDemandReasonExtraData & extraData)136 void SystemAbilityOnDemandReason::SetExtraData(OnDemandReasonExtraData& extraData)
137 {
138     extraData_ = extraData;
139 }
140 
GetExtraData() const141 const OnDemandReasonExtraData& SystemAbilityOnDemandReason::GetExtraData() const
142 {
143     return extraData_;
144 }
145 }