1/*
2 * Copyright (c) 2023-2024 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 "device_profile.h"
17#include "cJSON.h"
18#include "distributed_device_profile_constants.h"
19#include "macro_utils.h"
20#include "profile_utils.h"
21
22namespace OHOS {
23namespace DistributedDeviceProfile {
24namespace {
25    const std::string TAG = "DeviceProfile";
26}
27std::string DeviceProfile::GetDeviceId() const
28{
29    return deviceId_;
30}
31
32void DeviceProfile::SetDeviceId(const std::string& deviceId)
33{
34    deviceId_ = deviceId;
35}
36
37std::string DeviceProfile::GetDeviceTypeName() const
38{
39    return deviceTypeName_;
40}
41
42void DeviceProfile::SetDeviceTypeName(const std::string &deviceTypeName)
43{
44    deviceTypeName_ = deviceTypeName;
45}
46
47int32_t DeviceProfile::GetDeviceTypeId() const
48{
49    return deviceTypeId_;
50}
51
52void DeviceProfile::SetDeviceTypeId(int32_t deviceTypeId)
53{
54    deviceTypeId_ = deviceTypeId;
55}
56
57std::string DeviceProfile::GetDeviceName() const
58{
59    return deviceName_;
60}
61
62void DeviceProfile::SetDeviceName(const std::string& deviceName)
63{
64    deviceName_ = deviceName;
65}
66
67std::string DeviceProfile::GetManufactureName() const
68{
69    return manufactureName_;
70}
71
72void DeviceProfile::SetManufactureName(std::string manufactureName)
73{
74    manufactureName_ = manufactureName;
75}
76
77std::string DeviceProfile::GetDeviceModel() const
78{
79    return deviceModel_;
80}
81
82void DeviceProfile::SetDeviceModel(const std::string &deviceModel)
83{
84    deviceModel_ = deviceModel;
85}
86
87int64_t DeviceProfile::GetStorageCapability() const
88{
89    return storageCapability_;
90}
91
92void DeviceProfile::SetStorageCapability(int64_t storageCapability)
93{
94    storageCapability_ = storageCapability;
95}
96
97int32_t DeviceProfile::GetOsApiLevel() const
98{
99    return osApiLevel_;
100}
101
102void DeviceProfile::SetOsApiLevel(int32_t osApiLevel)
103{
104    osApiLevel_ = osApiLevel;
105}
106
107std::string DeviceProfile::GetOsVersion() const
108{
109    return osVersion_;
110}
111
112void DeviceProfile::SetOsVersion(const std::string& osVersion)
113{
114    osVersion_ = osVersion;
115}
116
117int32_t DeviceProfile::GetOsType() const
118{
119    return osType_;
120}
121
122void DeviceProfile::SetOsType(int32_t osType)
123{
124    osType_ = osType;
125}
126
127std::string DeviceProfile::GetOsSysCap() const
128{
129    return osSysCap_;
130}
131
132void DeviceProfile::SetOsSysCap(const std::string& osSysCap)
133{
134    osSysCap_ = osSysCap;
135}
136
137bool DeviceProfile::Marshalling(MessageParcel& parcel) const
138{
139    WRITE_HELPER_RET(parcel, String, deviceId_, false);
140    WRITE_HELPER_RET(parcel, String, deviceTypeName_, false);
141    WRITE_HELPER_RET(parcel, Int32, deviceTypeId_, false);
142    WRITE_HELPER_RET(parcel, String, deviceName_, false);
143    WRITE_HELPER_RET(parcel, String, manufactureName_, false);
144    WRITE_HELPER_RET(parcel, String, deviceModel_, false);
145    WRITE_HELPER_RET(parcel, Int64, storageCapability_, false);
146    WRITE_HELPER_RET(parcel, String, osSysCap_, false);
147    WRITE_HELPER_RET(parcel, Int32, osApiLevel_, false);
148    WRITE_HELPER_RET(parcel, String, osVersion_, false);
149    WRITE_HELPER_RET(parcel, Int32, osType_, false);
150    return true;
151}
152
153bool DeviceProfile::UnMarshalling(MessageParcel& parcel)
154{
155    READ_HELPER_RET(parcel, String, deviceId_, false);
156    READ_HELPER_RET(parcel, String, deviceTypeName_, false);
157    READ_HELPER_RET(parcel, Int32, deviceTypeId_, false);
158    READ_HELPER_RET(parcel, String, deviceName_, false);
159    READ_HELPER_RET(parcel, String, manufactureName_, false);
160    READ_HELPER_RET(parcel, String, deviceModel_, false);
161    READ_HELPER_RET(parcel, Int64, storageCapability_, false);
162    READ_HELPER_RET(parcel, String, osSysCap_, false);
163    READ_HELPER_RET(parcel, Int32, osApiLevel_, false);
164    READ_HELPER_RET(parcel, String, osVersion_, false);
165    READ_HELPER_RET(parcel, Int32, osType_, false);
166    return true;
167}
168
169bool DeviceProfile::operator!=(const DeviceProfile& deviceProfile) const
170{
171    bool isNotEqual = (deviceId_ != deviceProfile.GetDeviceId() || deviceTypeName_ != deviceProfile.GetDeviceTypeName()
172        || deviceTypeId_ != deviceProfile.GetDeviceTypeId() || deviceName_ != deviceProfile.GetDeviceName() ||
173        manufactureName_ != deviceProfile.GetManufactureName() || deviceModel_ != deviceProfile.GetDeviceModel() ||
174        storageCapability_ != deviceProfile.GetStorageCapability() || osSysCap_ != deviceProfile.GetOsSysCap() ||
175        osApiLevel_ != deviceProfile.GetOsApiLevel() || osVersion_ != deviceProfile.GetOsVersion() || osType_ !=
176        deviceProfile.GetOsType());
177    if (isNotEqual) {
178        return true;
179    } else {
180        return false;
181    }
182}
183
184std::string DeviceProfile::dump() const
185{
186    cJSON* json = cJSON_CreateObject();
187    if (!cJSON_IsObject(json)) {
188        cJSON_Delete(json);
189        return EMPTY_STRING;
190    }
191    cJSON_AddStringToObject(json, DEVICE_ID.c_str(), ProfileUtils::GetAnonyString(deviceId_).c_str());
192    cJSON_AddStringToObject(json, DEVICE_TYPE_NAME.c_str(), deviceTypeName_.c_str());
193    cJSON_AddNumberToObject(json, DEVICE_TYPE_ID.c_str(), deviceTypeId_);
194    cJSON_AddStringToObject(json, DEVICE_NAME.c_str(), deviceName_.c_str());
195    cJSON_AddStringToObject(json, MANUFACTURE_NAME.c_str(), manufactureName_.c_str());
196    cJSON_AddStringToObject(json, DEVICE_MODEL.c_str(), deviceModel_.c_str());
197    cJSON_AddNumberToObject(json, STORAGE_CAPACITY.c_str(), storageCapability_);
198    cJSON_AddStringToObject(json, OS_SYS_CAPACITY.c_str(), osSysCap_.c_str());
199    cJSON_AddNumberToObject(json, OS_API_LEVEL.c_str(), osApiLevel_);
200    cJSON_AddStringToObject(json, OS_VERSION.c_str(), osVersion_.c_str());
201    cJSON_AddNumberToObject(json, OS_TYPE.c_str(), osType_);
202    char* jsonChars = cJSON_PrintUnformatted(json);
203    if (jsonChars == NULL) {
204        cJSON_Delete(json);
205        HILOGE("cJSON formatted to string failed!");
206        return EMPTY_STRING;
207    }
208    std::string jsonStr = jsonChars;
209    cJSON_Delete(json);
210    cJSON_free(jsonChars);
211    return jsonStr;
212}
213
214std::string DeviceProfile::AnnoymizeDump() const
215{
216    cJSON* json = cJSON_CreateObject();
217    if (!cJSON_IsObject(json)) {
218        cJSON_Delete(json);
219        return EMPTY_STRING;
220    }
221    cJSON_AddStringToObject(json, DEVICE_ID.c_str(), ProfileUtils::GetAnonyString(deviceId_).c_str());
222    cJSON_AddStringToObject(json, DEVICE_TYPE_NAME.c_str(), deviceTypeName_.c_str());
223    cJSON_AddNumberToObject(json, DEVICE_TYPE_ID.c_str(), deviceTypeId_);
224    cJSON_AddStringToObject(json, DEVICE_NAME.c_str(), deviceName_.c_str());
225    cJSON_AddStringToObject(json, MANUFACTURE_NAME.c_str(), manufactureName_.c_str());
226    cJSON_AddStringToObject(json, DEVICE_MODEL.c_str(), deviceModel_.c_str());
227    cJSON_AddStringToObject(json, STORAGE_CAPACITY.c_str(),
228        ProfileUtils::GetAnonyString(std::to_string(storageCapability_)).c_str());
229    cJSON_AddStringToObject(json, OS_SYS_CAPACITY.c_str(),
230        ProfileUtils::GetAnonyString(osSysCap_).c_str());
231    cJSON_AddStringToObject(json, OS_API_LEVEL.c_str(),
232        ProfileUtils::GetAnonyString(std::to_string(osApiLevel_)).c_str());
233    cJSON_AddStringToObject(json, OS_VERSION.c_str(),
234        ProfileUtils::GetAnonyString(osVersion_).c_str());
235    cJSON_AddStringToObject(json, OS_TYPE.c_str(),
236        ProfileUtils::GetAnonyString(std::to_string(osType_)).c_str());
237    char* jsonChars = cJSON_PrintUnformatted(json);
238    if (jsonChars == NULL) {
239        cJSON_Delete(json);
240        HILOGE("cJSON formatted to string failed!");
241        return EMPTY_STRING;
242    }
243    std::string jsonStr = jsonChars;
244    cJSON_Delete(json);
245    cJSON_free(jsonChars);
246    return jsonStr;
247}
248} // namespace DistributedDeviceProfile
249} // namespace OHOS