1 /*
2  * Copyright (C) 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 #ifdef FEATURE_GEOCODE_SUPPORT
17 #include "geo_convert_request.h"
18 
19 namespace OHOS {
20 namespace Location {
GeoConvertRequest()21 GeoConvertRequest::GeoConvertRequest()
22 {
23     locale_ = "";
24     latitude_ = 0.0;
25     longitude_ = 0.0;
26     maxItems_ = 0;
27     description_ = "";
28     maxLatitude_ = 0.0;
29     maxLongitude_ = 0.0;
30     minLatitude_ = 0.0;
31     minLongitude_ = 0.0;
32     bundleName_ = "";
33     callback_ = nullptr;
34     transId_ = "";
35     country_ = "";
36     requestType_ = GeoCodeType::REQUEST_GEOCODE;
37 }
38 
~GeoConvertRequest()39 GeoConvertRequest::~GeoConvertRequest() {}
40 
GetLocale()41 std::string GeoConvertRequest::GetLocale()
42 {
43     return locale_;
44 }
45 
SetLocale(std::string locale)46 void GeoConvertRequest::SetLocale(std::string locale)
47 {
48     locale_ = locale;
49 }
50 
GetLatitude()51 double GeoConvertRequest::GetLatitude()
52 {
53     return latitude_;
54 }
55 
SetLatitude(double latitude)56 void GeoConvertRequest::SetLatitude(double latitude)
57 {
58     latitude_ = latitude;
59 }
60 
GetLongitude()61 double GeoConvertRequest::GetLongitude()
62 {
63     return longitude_;
64 }
65 
SetLongitude(double longitude)66 void GeoConvertRequest::SetLongitude(double longitude)
67 {
68     longitude_ = longitude;
69 }
70 
GetMaxItems()71 int32_t GeoConvertRequest::GetMaxItems()
72 {
73     return maxItems_;
74 }
75 
SetMaxItems(int32_t maxItems)76 void GeoConvertRequest::SetMaxItems(int32_t maxItems)
77 {
78     maxItems_ = maxItems;
79 }
80 
GetDescription()81 std::string GeoConvertRequest::GetDescription()
82 {
83     return description_;
84 }
85 
SetDescription(std::string description)86 void GeoConvertRequest::SetDescription(std::string description)
87 {
88     description_ = description;
89 }
90 
GetMaxLatitude()91 double GeoConvertRequest::GetMaxLatitude()
92 {
93     return maxLatitude_;
94 }
95 
SetMaxLatitude(double maxLatitude)96 void GeoConvertRequest::SetMaxLatitude(double maxLatitude)
97 {
98     maxLatitude_ = maxLatitude;
99 }
100 
GetMaxLongitude()101 double GeoConvertRequest::GetMaxLongitude()
102 {
103     return maxLongitude_;
104 }
105 
SetMaxLongitude(double maxLongitude)106 void GeoConvertRequest::SetMaxLongitude(double maxLongitude)
107 {
108     maxLongitude_ = maxLongitude;
109 }
110 
GetMinLatitude()111 double GeoConvertRequest::GetMinLatitude()
112 {
113     return minLatitude_;
114 }
115 
SetMinLatitude(double minLatitude)116 void GeoConvertRequest::SetMinLatitude(double minLatitude)
117 {
118     minLatitude_ = minLatitude;
119 }
120 
GetMinLongitude()121 double GeoConvertRequest::GetMinLongitude()
122 {
123     return minLongitude_;
124 }
125 
SetMinLongitude(double minLongitude)126 void GeoConvertRequest::SetMinLongitude(double minLongitude)
127 {
128     minLongitude_ = minLongitude;
129 }
130 
GetBundleName()131 std::string GeoConvertRequest::GetBundleName()
132 {
133     return bundleName_;
134 }
135 
SetBundleName(std::string bundleName)136 void GeoConvertRequest::SetBundleName(std::string bundleName)
137 {
138     bundleName_ = bundleName;
139 }
140 
GetCallback()141 sptr<IRemoteObject> GeoConvertRequest::GetCallback()
142 {
143     return callback_;
144 }
145 
SetCallback(sptr<IRemoteObject> callback)146 void GeoConvertRequest::SetCallback(sptr<IRemoteObject> callback)
147 {
148     callback_ = callback;
149 }
150 
GetTransId()151 std::string GeoConvertRequest::GetTransId()
152 {
153     return transId_;
154 }
155 
SetTransId(std::string transId)156 void GeoConvertRequest::SetTransId(std::string transId)
157 {
158     transId_ = transId;
159 }
160 
GetCountry()161 std::string GeoConvertRequest::GetCountry()
162 {
163     return country_;
164 }
165 
SetCountry(std::string country)166 void GeoConvertRequest::SetCountry(std::string country)
167 {
168     country_ = country;
169 }
170 
GetRequestType()171 GeoCodeType GeoConvertRequest::GetRequestType()
172 {
173     return requestType_;
174 }
175 
SetRequestType(GeoCodeType requestType)176 void GeoConvertRequest::SetRequestType(GeoCodeType requestType)
177 {
178     requestType_ = requestType;
179 }
180 
Marshalling(MessageParcel & parcel) const181 bool GeoConvertRequest::Marshalling(MessageParcel& parcel) const
182 {
183     if (requestType_ == GeoCodeType::REQUEST_REVERSE_GEOCODE) {
184         parcel.WriteString16(Str8ToStr16(locale_)); // locale
185         parcel.WriteDouble(latitude_); // latitude
186         parcel.WriteDouble(longitude_); // longitude
187         parcel.WriteInt32(maxItems_); // maxItems
188     } else {
189         parcel.WriteString16(Str8ToStr16(locale_)); // locale
190         parcel.WriteString16(Str8ToStr16(description_)); // description
191         parcel.WriteInt32(maxItems_); // maxItems
192         parcel.WriteDouble(minLatitude_); // minLatitude
193         parcel.WriteDouble(minLongitude_); // minLongitude
194         parcel.WriteDouble(maxLatitude_); // maxLatitude
195         parcel.WriteDouble(maxLongitude_); // maxLongitude
196     }
197     parcel.WriteString16(Str8ToStr16(bundleName_)); // bundleName
198     parcel.WriteRemoteObject(callback_);
199     parcel.WriteString16(Str8ToStr16(transId_)); // transId
200     parcel.WriteString16(Str8ToStr16(country_)); // country
201     return true;
202 }
203 
Unmarshalling(MessageParcel & parcel,GeoCodeType requestType)204 std::unique_ptr<GeoConvertRequest> GeoConvertRequest::Unmarshalling(MessageParcel& parcel, GeoCodeType requestType)
205 {
206     std::unique_ptr<GeoConvertRequest> geoConvertRequest = std::make_unique<GeoConvertRequest>();
207     geoConvertRequest->SetRequestType(requestType);
208     geoConvertRequest->ReadFromParcel(parcel);
209     return geoConvertRequest;
210 }
211 
ReadFromParcel(MessageParcel & parcel)212 void GeoConvertRequest::ReadFromParcel(MessageParcel& parcel)
213 {
214     if (requestType_ == GeoCodeType::REQUEST_REVERSE_GEOCODE) {
215         locale_ = Str16ToStr8(parcel.ReadString16()); // locale
216         latitude_ = parcel.ReadDouble(); // latitude
217         longitude_ =  parcel.ReadDouble(); // longitude
218         maxItems_ = parcel.ReadInt32(); // maxItems
219     } else {
220         locale_ = Str16ToStr8(parcel.ReadString16()); // locale
221         description_ = Str16ToStr8(parcel.ReadString16()); // description
222         maxItems_ = parcel.ReadInt32(); // maxItems
223         minLatitude_ = parcel.ReadDouble(); // minLatitude
224         minLongitude_ = parcel.ReadDouble(); // minLongitude
225         maxLatitude_ = parcel.ReadDouble(); // maxLatitude
226         maxLongitude_ = parcel.ReadDouble(); // maxLongitude
227     }
228     bundleName_ = Str16ToStr8(parcel.ReadString16()); // bundleName
229     callback_ = parcel.ReadRemoteObject();
230     transId_ = Str16ToStr8(parcel.ReadString16()); // transId
231     country_ = Str16ToStr8(parcel.ReadString16()); // country
232 }
233 
OrderParcel(MessageParcel & in,MessageParcel & out,GeoCodeType requestType,std::string bundleName)234 void GeoConvertRequest::OrderParcel(
235     MessageParcel& in, MessageParcel& out, GeoCodeType requestType, std::string bundleName)
236 {
237     if (requestType == GeoCodeType::REQUEST_REVERSE_GEOCODE) {
238         out.WriteString16(in.ReadString16()); // locale
239         out.WriteDouble(in.ReadDouble()); // latitude
240         out.WriteDouble(in.ReadDouble()); // longitude
241         out.WriteInt32(in.ReadInt32()); // maxItems
242     } else {
243         out.WriteString16(in.ReadString16()); // locale
244         out.WriteString16(in.ReadString16()); // description
245         out.WriteInt32(in.ReadInt32()); // maxItems
246         out.WriteDouble(in.ReadDouble()); // minLatitude
247         out.WriteDouble(in.ReadDouble()); // minLongitude
248         out.WriteDouble(in.ReadDouble()); // maxLatitude
249         out.WriteDouble(in.ReadDouble()); // maxLongitude
250     }
251     auto transId = in.ReadString16();
252     auto country = in.ReadString16();
253     auto callback = in.ReadRemoteObject();
254     out.WriteString16(Str8ToStr16(bundleName)); // bundleName
255     out.WriteRemoteObject(callback); // callback
256     out.WriteString16(transId); // transId
257     out.WriteString16(country); // country
258 }
259 } // namespace Location
260 } // namespace OHOS
261 #endif
262