1 /*
2 * Copyright (c) 2021-2022 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 "result_convert.h"
17
18 #include "hilog_wrapper_api.h"
19
20 namespace OHOS {
21 namespace ContactsApi {
ResultConvert(void)22 ResultConvert::ResultConvert(void)
23 {
24 }
25
~ResultConvert()26 ResultConvert::~ResultConvert()
27 {
28 }
29
30 /**
31 * @brief Get object array by resultSet
32 *
33 * @param env Conditions for convert operation
34 * @param resultSet Conditions for convert operation
35 *
36 * @return The result returned by convert operation
37 */
ResultSetToObject(napi_env env,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)38 napi_value ResultConvert::ResultSetToObject(
39 napi_env env, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
40 {
41 if (resultSet == nullptr) {
42 HILOG_ERROR("ResultConvert::ResultSetToObject resultSet is nullptr");
43 napi_value array;
44 napi_create_array(env, &array);
45 return array;
46 }
47 int rowCount = 0;
48 resultSet->GetRowCount(rowCount);
49 HILOG_INFO("ResultSetToObject GetRowCount is %{public}d", rowCount);
50 if (rowCount == 0) {
51 napi_value array;
52 napi_create_array(env, &array);
53 resultSet->Close();
54 return array;
55 }
56 std::map<int, napi_value> resultSetMap;
57 std::map<int, std::string> quickSearchMap;
58 int resultSetNum = resultSet->GoToFirstRow();
59 while (resultSetNum == 0) {
60 int contactIdValue = 0;
61 std::string contactIdKey = "contact_id";
62 int contactIndex = 0;
63 resultSet->GetColumnIndex(contactIdKey, contactIndex);
64 resultSet->GetInt(contactIndex, contactIdValue);
65 napi_value napiObject = GetResultMapValue(env, resultSetMap, contactIdValue);
66 PutQuickSearchKey(env, resultSet, quickSearchMap, contactIdValue);
67 ConvertContactObject(env, napiObject, resultSet);
68 resultSetNum = resultSet->GoToNextRow();
69 }
70 resultSet->Close();
71 napi_value array = ConvertContactArray(env, resultSetMap, quickSearchMap);
72 return array;
73 }
74
PutQuickSearchKey(napi_env env,std::shared_ptr<DataShare::DataShareResultSet> & resultSet,std::map<int,std::string> & quickSearchMap,int contactIdValue)75 void ResultConvert::PutQuickSearchKey(napi_env env, std::shared_ptr<DataShare::DataShareResultSet> &resultSet,
76 std::map<int, std::string> &quickSearchMap, int contactIdValue)
77 {
78 std::string quickSearchValue = "";
79 std::string quickSearchKey = "quick_search_key";
80 int columnIndex = 0;
81 resultSet->GetColumnIndex(quickSearchKey, columnIndex);
82 resultSet->GetString(columnIndex, quickSearchValue);
83 if (quickSearchMap.count(contactIdValue) <= 0) {
84 napi_value napiQuickSearchValue;
85 napi_create_string_utf8(env, quickSearchValue.c_str(), NAPI_AUTO_LENGTH, &napiQuickSearchValue);
86 quickSearchMap.insert(std::pair<int, std::string>(contactIdValue, quickSearchValue));
87 }
88 }
89
ConvertContactArray(napi_env env,std::map<int,napi_value> & resultSetMap,std::map<int,std::string> & quickSearchMap)90 napi_value ResultConvert::ConvertContactArray(
91 napi_env env, std::map<int, napi_value> &resultSetMap, std::map<int, std::string> &quickSearchMap)
92 {
93 napi_value array;
94 napi_create_array(env, &array);
95 int count = 0;
96 std::map<int, napi_value>::iterator it;
97 for (it = resultSetMap.begin(); it != resultSetMap.end(); ++it) {
98 napi_value elementObject = it->second;
99 if (quickSearchMap.count(it->first) > 0) {
100 napi_value keyValue;
101 napi_create_string_utf8(env, quickSearchMap[it->first].c_str(), NAPI_AUTO_LENGTH, &keyValue);
102 napi_value napiQuickKey;
103 napi_create_string_utf8(env, "key", NAPI_AUTO_LENGTH, &napiQuickKey);
104 napi_set_property(env, elementObject, napiQuickKey, keyValue);
105 }
106 napi_value keyValue;
107 napi_create_int64(env, it->first, &keyValue);
108 napi_value napiIdKey;
109 napi_create_string_utf8(env, "id", NAPI_AUTO_LENGTH, &napiIdKey);
110 napi_set_property(env, elementObject, napiIdKey, keyValue);
111 napi_set_element(env, array, count, elementObject);
112 ++count;
113 }
114 return array;
115 }
116
117 /**
118 * @brief Converting NaPi objects to C++ objects
119 *
120 * @param env Conditions for convert operation
121 * @param napiObject Conditions for convert operation
122 * @param resultSet Target of convert operation
123 */
ConvertContactObject(napi_env env,napi_value napiObject,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)124 void ResultConvert::ConvertContactObject(
125 napi_env env, napi_value napiObject, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
126 {
127 int typeIdValue = 0;
128 std::string typeId = "type_id";
129 int columnIndexType = 0;
130 resultSet->GetColumnIndex(typeId, columnIndexType);
131 resultSet->GetInt(columnIndexType, typeIdValue);
132 ConvertEmail(env, napiObject, typeIdValue, resultSet);
133 ConvertName(env, napiObject, typeIdValue, resultSet);
134 ConvertUri(env, napiObject, typeIdValue, resultSet);
135 ConvertEvent(env, napiObject, typeIdValue, resultSet);
136 ConvertGroup(env, napiObject, typeIdValue, resultSet);
137 ConvertImAddress(env, napiObject, typeIdValue, resultSet);
138 ConvertPhoneNumber(env, napiObject, typeIdValue, resultSet);
139 ConvertPostalAddress(env, napiObject, typeIdValue, resultSet);
140 ConvertRelation(env, napiObject, typeIdValue, resultSet);
141 ConvertSipAddress(env, napiObject, typeIdValue, resultSet);
142 ConvertWebsite(env, napiObject, typeIdValue, resultSet);
143 ConvertNickName(env, napiObject, typeIdValue, resultSet);
144 ConvertNote(env, napiObject, typeIdValue, resultSet);
145 ConvertOrganization(env, napiObject, typeIdValue, resultSet);
146 }
147
IsEmpty(std::shared_ptr<DataShare::DataShareResultSet> & resultSet)148 bool ResultConvert::IsEmpty(std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
149 {
150 if (resultSet == nullptr) {
151 HILOG_ERROR("ResultSetToHolder resultSet is nullptr");
152 return true;
153 }
154 int rowCount = 0;
155 resultSet->GetRowCount(rowCount);
156 if (rowCount == 0) {
157 resultSet->Close();
158 return true;
159 }
160 return false;
161 }
162
ResultSetToHolder(napi_env env,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)163 napi_value ResultConvert::ResultSetToHolder(
164 napi_env env, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
165 {
166 napi_value array;
167 napi_create_array(env, &array);
168 if (IsEmpty(resultSet)) {
169 return array;
170 }
171 int resultSetNum = resultSet->GoToFirstRow();
172 int count = 0;
173 while (resultSetNum == 0) {
174 napi_value elementObject;
175 napi_create_object(env, &elementObject);
176 int idValue;
177 std::string id = "id";
178 int idIndex = 0;
179 resultSet->GetColumnIndex(id, idIndex);
180 resultSet->GetInt(idIndex, idValue);
181 napi_value napiIdKey;
182 napi_create_string_utf8(env, "holderId", NAPI_AUTO_LENGTH, &napiIdKey);
183 napi_value napiValue;
184 napi_create_int64(env, idValue, &napiValue);
185 napi_set_property(env, elementObject, napiIdKey, napiValue);
186 std::string displayName = "account_name";
187 std::string displayNameValue;
188 int displayNameIndex = 0;
189 resultSet->GetColumnIndex(displayName, displayNameIndex);
190 resultSet->GetString(displayNameIndex, displayNameValue);
191 napi_value napiDisplayNameKey;
192 napi_create_string_utf8(env, "displayName", NAPI_AUTO_LENGTH, &napiDisplayNameKey);
193 napi_value napiDisplayNameValue;
194 napi_create_string_utf8(env, displayNameValue.c_str(), NAPI_AUTO_LENGTH, &napiDisplayNameValue);
195 napi_set_property(env, elementObject, napiDisplayNameKey, napiDisplayNameValue);
196 std::string bundleName = "account_type";
197 std::string bundleNameValue;
198 int bundleNameIndex = 0;
199 resultSet->GetColumnIndex(bundleName, bundleNameIndex);
200 resultSet->GetString(bundleNameIndex, bundleNameValue);
201 napi_value napiBundleNameKey;
202 napi_create_string_utf8(env, "bundleName", NAPI_AUTO_LENGTH, &napiBundleNameKey);
203 napi_value napiBundleNameValue;
204 napi_create_string_utf8(env, bundleNameValue.c_str(), NAPI_AUTO_LENGTH, &napiBundleNameValue);
205 napi_set_property(env, elementObject, napiBundleNameKey, napiBundleNameValue);
206 napi_set_element(env, array, count, elementObject);
207 ++count;
208 resultSetNum = resultSet->GoToNextRow();
209 }
210 resultSet->Close();
211 return array;
212 }
213
ResultSetToGroup(napi_env env,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)214 napi_value ResultConvert::ResultSetToGroup(
215 napi_env env, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
216 {
217 napi_value array;
218 NAPI_CALL(env, napi_create_array(env, &array));
219 if (resultSet == nullptr) {
220 HILOG_ERROR("ResultSetToGroup resultSet is nullptr");
221 return array;
222 }
223 int rowCount = 0;
224 resultSet->GetRowCount(rowCount);
225 HILOG_INFO("ResultSetToGroup GetRowCount is %{public}d", rowCount);
226 if (rowCount == 0) {
227 resultSet->Close();
228 return array;
229 }
230 int resultSetNum = resultSet->GoToFirstRow();
231 HILOG_INFO("ResultSetToGroup resultSetNum is %{public}d", resultSetNum);
232 int count = 0;
233 while (resultSetNum == 0) {
234 napi_value elementObject;
235 napi_create_object(env, &elementObject);
236 int idValue;
237 std::string id = "id";
238 int idIndex = 0;
239 resultSet->GetColumnIndex(id, idIndex);
240 resultSet->GetInt(idIndex, idValue);
241 napi_value napiIdKey;
242 napi_create_string_utf8(env, "id", NAPI_AUTO_LENGTH, &napiIdKey);
243 napi_value napiValue;
244 napi_create_int64(env, idValue, &napiValue);
245 napi_set_property(env, elementObject, napiIdKey, napiValue);
246 std::string title = "group_name";
247 std::string titleValue;
248 int titleIndex = 0;
249 resultSet->GetColumnIndex(title, titleIndex);
250 resultSet->GetString(titleIndex, titleValue);
251 napi_value napiTitleKey;
252 napi_create_string_utf8(env, "title", NAPI_AUTO_LENGTH, &napiTitleKey);
253 napi_value napiTitleValue;
254 napi_create_string_utf8(env, titleValue.c_str(), NAPI_AUTO_LENGTH, &napiTitleValue);
255 napi_set_property(env, elementObject, napiTitleKey, napiTitleValue);
256 napi_set_element(env, array, count, elementObject);
257 ++count;
258 resultSetNum = resultSet->GoToNextRow();
259 }
260 resultSet->Close();
261 return array;
262 }
263
GetResultMapValue(napi_env env,std::map<int,napi_value> & resultSetMap,int & contactId)264 napi_value ResultConvert::GetResultMapValue(napi_env env, std::map<int, napi_value> &resultSetMap, int &contactId)
265 {
266 napi_value napiObject;
267 if (resultSetMap.count(contactId) > 0) {
268 std::map<int, napi_value>::iterator it = resultSetMap.find(contactId);
269 napiObject = it->second;
270 } else {
271 napi_create_object(env, &napiObject);
272 resultSetMap.insert(std::pair<int, napi_value>(contactId, napiObject));
273 std::map<int, napi_value>::iterator it = resultSetMap.find(contactId);
274 napiObject = it->second;
275 }
276 return napiObject;
277 }
278
GetNapiValue(napi_env env,const std::string keyChar,napi_value napiObject)279 napi_value ResultConvert::GetNapiValue(napi_env env, const std::string keyChar, napi_value napiObject)
280 {
281 if (napiObject == nullptr) {
282 HILOG_ERROR("ResultConvert::GetNapiValue object is nullptr");
283 return nullptr;
284 }
285 napi_value key;
286 napi_create_string_utf8(env, keyChar.c_str(), NAPI_AUTO_LENGTH, &key);
287 bool result = false;
288 napi_has_property(env, napiObject, key, &result);
289 if (result) {
290 napi_value value = nullptr;
291 napi_get_property(env, napiObject, key, &value);
292 return value;
293 }
294 return nullptr;
295 }
296
GetNapiElementObject(napi_env env,napi_value napiObject,const std::string valueChar)297 napi_value ResultConvert::GetNapiElementObject(napi_env env, napi_value napiObject, const std::string valueChar)
298 {
299 napi_value objectElement = GetNapiValue(env, valueChar, napiObject);
300 if (objectElement == nullptr) {
301 napi_create_object(env, &objectElement);
302 }
303 return objectElement;
304 }
305
GetNapiElementArray(napi_env env,napi_value napiObject,const std::string valueChar)306 napi_value ResultConvert::GetNapiElementArray(napi_env env, napi_value napiObject, const std::string valueChar)
307 {
308 napi_value emailArray = GetNapiValue(env, valueChar, napiObject);
309 if (emailArray == nullptr) {
310 napi_create_array(env, &emailArray);
311 }
312 return emailArray;
313 }
314
GetResultValue(napi_env env,std::string & contentKey,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)315 napi_value ResultConvert::GetResultValue(
316 napi_env env, std::string &contentKey, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
317 {
318 int columnIndex = ERROR;
319 resultSet->GetColumnIndex(contentKey, columnIndex);
320 OHOS::DataShare::DataType columnType;
321 resultSet->GetDataType(columnIndex, columnType);
322 napi_value napiValue = nullptr;
323 if (columnType == OHOS::DataShare::DataType::TYPE_NULL) {
324 return napiValue;
325 } else if (columnType == OHOS::DataShare::DataType::TYPE_BLOB) {
326 return napiValue;
327 } else if (columnType == OHOS::DataShare::DataType::TYPE_INTEGER) {
328 int intValue = 0;
329 resultSet->GetInt(columnIndex, intValue);
330 napi_create_int64(env, intValue, &napiValue);
331 } else if (columnType == OHOS::DataShare::DataType::TYPE_FLOAT) {
332 double doubleValue = 0;
333 resultSet->GetDouble(columnIndex, doubleValue);
334 napi_create_double(env, doubleValue, &napiValue);
335 } else if (columnType == OHOS::DataShare::DataType::TYPE_STRING) {
336 std::string stringValue;
337 resultSet->GetString(columnIndex, stringValue);
338 napi_create_string_utf8(env, stringValue.c_str(), NAPI_AUTO_LENGTH, &napiValue);
339 }
340 return napiValue;
341 }
342
CreateNapiStringValue(napi_env env,const std::string key)343 napi_value ResultConvert::CreateNapiStringValue(napi_env env, const std::string key)
344 {
345 napi_value keyValue;
346 napi_create_string_utf8(env, key.c_str(), NAPI_AUTO_LENGTH, &keyValue);
347 return keyValue;
348 }
349
ConvertEmail(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)350 void ResultConvert::ConvertEmail(
351 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
352 {
353 if (typeId == EMAIL) {
354 const std::string emails = "emails";
355 napi_value emailArray = GetNapiElementArray(env, napiObject, emails);
356 uint32_t count = 0;
357 napi_get_array_length(env, emailArray, &count);
358 napi_value objectElement;
359 napi_create_object(env, &objectElement);
360 std::string detailInfoKey = "detail_info";
361 std::string customDataKey = "custom_data";
362 std::string extend7Key = "extend7";
363 std::string aliasDetailInfoKey = "alias_detail_info";
364 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
365 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
366 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
367 napi_value aliasDetailInfoValue = GetResultValue(env, aliasDetailInfoKey, resultSet);
368 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "email");
369 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
370 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
371 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
372 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
373 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
374 napi_value napiDisplayNameIdKey = CreateNapiStringValue(env, "displayName");
375 napi_set_property(env, objectElement, napiDisplayNameIdKey, aliasDetailInfoValue);
376 napi_set_element(env, emailArray, count, objectElement);
377 napi_value napiElementKey;
378 napi_create_string_utf8(env, emails.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
379 napi_set_property(env, napiObject, napiElementKey, emailArray);
380 }
381 }
382
ConvertName(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)383 void ResultConvert::ConvertName(
384 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
385 {
386 if (typeId == NAME) {
387 const std::string name = "name";
388 napi_value objectElement = GetNapiElementObject(env, napiObject, name);
389 std::string fullNameKey = "detail_info";
390 std::string familyNameKey = "family_name";
391 std::string familyNamePhoneticKey = "phonetic_name";
392 std::string givenNameKey = "given_name";
393 std::string givenNamePhoneticKey = "given_name_phonetic";
394 std::string middleNamePhoneticKey = "middle_name_phonetic";
395 std::string middleNameKey = "other_lan_last_name";
396 std::string namePrefixKey = "alpha_name";
397 std::string nameSuffixKey = "other_lan_first_name";
398 napi_value fullNameValue = GetResultValue(env, fullNameKey, resultSet);
399 napi_value familyNameValue = GetResultValue(env, familyNameKey, resultSet);
400 napi_value familyNamePhoneticValue = GetResultValue(env, familyNamePhoneticKey, resultSet);
401 napi_value givenNameValue = GetResultValue(env, givenNameKey, resultSet);
402 napi_value givenNamePhoneticValue = GetResultValue(env, givenNamePhoneticKey, resultSet);
403 napi_value middleNamePhoneticValue = GetResultValue(env, middleNamePhoneticKey, resultSet);
404 napi_value middleNameValue = GetResultValue(env, middleNameKey, resultSet);
405 napi_value namePrefixValue = GetResultValue(env, namePrefixKey, resultSet);
406 napi_value nameSuffixValue = GetResultValue(env, nameSuffixKey, resultSet);
407 napi_value napiFullNameKey = CreateNapiStringValue(env, "fullName");
408 napi_set_property(env, objectElement, napiFullNameKey, fullNameValue);
409 napi_value napiFamilyNameKey = CreateNapiStringValue(env, "familyName");
410 napi_set_property(env, objectElement, napiFamilyNameKey, familyNameValue);
411 napi_value napiFamilyNamePhoneticKey = CreateNapiStringValue(env, "phonetic_name");
412 napi_set_property(env, objectElement, napiFamilyNamePhoneticKey, familyNamePhoneticValue);
413 napi_value napiGivenNameKey = CreateNapiStringValue(env, "givenName");
414 napi_set_property(env, objectElement, napiGivenNameKey, givenNameValue);
415 napi_value napiGivenNamePhoneticKey = CreateNapiStringValue(env, "givenNamePhonetic");
416 napi_set_property(env, objectElement, napiGivenNamePhoneticKey, givenNamePhoneticValue);
417 napi_value napiMiddleNamePhoneticKey = CreateNapiStringValue(env, "middleNamePhoneticKey");
418 napi_set_property(env, objectElement, napiMiddleNamePhoneticKey, middleNamePhoneticValue);
419 napi_value napiMiddleNameKey = CreateNapiStringValue(env, "middleName");
420 napi_set_property(env, objectElement, napiMiddleNameKey, middleNameValue);
421 napi_value napiNamePrefixKey = CreateNapiStringValue(env, "namePrefixKey");
422 napi_set_property(env, objectElement, napiNamePrefixKey, namePrefixValue);
423 napi_value napiNameSuffixKey = CreateNapiStringValue(env, "nameSuffixKey");
424 napi_set_property(env, objectElement, napiNameSuffixKey, nameSuffixValue);
425 napi_value napiElementKey;
426 napi_create_string_utf8(env, name.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
427 napi_set_property(env, napiObject, napiElementKey, objectElement);
428 }
429 }
430
ConvertUri(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)431 void ResultConvert::ConvertUri(
432 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
433 {
434 if (typeId == PHOTO) {
435 const std::string portrait = "portrait";
436 napi_value objectElement = GetNapiElementObject(env, napiObject, portrait);
437 std::string uri = "detail_info";
438 napi_value uriValue = GetResultValue(env, uri, resultSet);
439 napi_value napiUri = CreateNapiStringValue(env, "uri");
440 napi_set_property(env, objectElement, napiUri, uriValue);
441 napi_value napiElementKey;
442 napi_create_string_utf8(env, portrait.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
443 napi_set_property(env, napiObject, napiElementKey, objectElement);
444 }
445 }
446
ConvertEvent(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)447 void ResultConvert::ConvertEvent(
448 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
449 {
450 if (typeId == CONTACT_EVENT) {
451 const std::string events = "events";
452 napi_value emailArray = GetNapiElementArray(env, napiObject, events);
453 uint32_t count = 0;
454 napi_get_array_length(env, emailArray, &count);
455 napi_value objectElement;
456 napi_create_object(env, &objectElement);
457 std::string detailInfoKey = "detail_info";
458 std::string customDataKey = "custom_data";
459 std::string extend7Key = "extend7";
460 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
461 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
462 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
463 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "eventDate");
464 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
465 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
466 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
467 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
468 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
469 napi_set_element(env, emailArray, count, objectElement);
470 napi_value napiElementKey;
471 napi_create_string_utf8(env, events.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
472 napi_set_property(env, napiObject, napiElementKey, emailArray);
473 }
474 }
475
ConvertGroup(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)476 void ResultConvert::ConvertGroup(
477 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
478 {
479 if (typeId == GROUP_MEMBERSHIP) {
480 const std::string groups = "groups";
481 napi_value emailArray = GetNapiElementArray(env, napiObject, groups);
482 uint32_t count = 0;
483 napi_get_array_length(env, emailArray, &count);
484 napi_value objectElement;
485 napi_create_object(env, &objectElement);
486 std::string groupNameKey = "group_name";
487 napi_value groupNameValue = GetResultValue(env, groupNameKey, resultSet);
488 napi_value napiGroupNameKey = CreateNapiStringValue(env, "title");
489 napi_set_property(env, objectElement, napiGroupNameKey, groupNameValue);
490 std::string detailInfoKey = "detail_info";
491 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
492 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "groupId");
493 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
494 napi_value napiElementKey;
495 napi_create_string_utf8(env, groups.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
496 napi_set_property(env, napiObject, napiElementKey, emailArray);
497 }
498 }
499
ConvertImAddress(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)500 void ResultConvert::ConvertImAddress(
501 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
502 {
503 if (typeId == IM) {
504 const std::string imAddresses = "imAddresses";
505 napi_value emailArray = GetNapiElementArray(env, napiObject, imAddresses);
506 uint32_t count = 0;
507 napi_get_array_length(env, emailArray, &count);
508 napi_value objectElement;
509 napi_create_object(env, &objectElement);
510 std::string detailInfoKey = "detail_info";
511 std::string customDataKey = "custom_data";
512 std::string extend7Key = "extend7";
513 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
514 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
515 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
516 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "imAddress");
517 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
518 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
519 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
520 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
521 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
522 napi_set_element(env, emailArray, count, objectElement);
523 napi_value napiElementKey;
524 napi_create_string_utf8(env, imAddresses.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
525 napi_set_property(env, napiObject, napiElementKey, emailArray);
526 }
527 }
528
ConvertPhoneNumber(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)529 void ResultConvert::ConvertPhoneNumber(
530 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
531 {
532 if (typeId == PHONE) {
533 const std::string phoneNumbers = "phoneNumbers";
534 napi_value emailArray = GetNapiElementArray(env, napiObject, phoneNumbers);
535 uint32_t count = 0;
536 napi_get_array_length(env, emailArray, &count);
537 napi_value objectElement;
538 napi_create_object(env, &objectElement);
539 std::string detailInfoKey = "detail_info";
540 std::string customDataKey = "custom_data";
541 std::string extend7Key = "extend7";
542 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
543 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
544 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
545 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "phoneNumber");
546 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
547 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
548 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
549 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
550 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
551 napi_set_element(env, emailArray, count, objectElement);
552 napi_value napiElementKey;
553 napi_create_string_utf8(env, phoneNumbers.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
554 napi_set_property(env, napiObject, napiElementKey, emailArray);
555 }
556 }
557
ConvertPostalAddress(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)558 void ResultConvert::ConvertPostalAddress(
559 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
560 {
561 if (typeId == POSTAL_ADDRESS) {
562 const std::string postalAddresses = "postalAddresses";
563 napi_value emailArray = GetNapiElementArray(env, napiObject, postalAddresses);
564 uint32_t count = 0;
565 napi_get_array_length(env, emailArray, &count);
566 napi_value objectElement;
567 napi_create_object(env, &objectElement);
568 std::string detailInfoKey = "detail_info";
569 std::string customDataKey = "custom_data";
570 std::string extend7Key = "extend7";
571 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
572 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
573 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
574 std::string neighborhoodKey = "neighborhood";
575 std::string poboxKey = "pobox";
576 std::string postcodeKey = "postcode";
577 std::string regionKey = "region";
578 std::string streetKey = "street";
579 std::string cityKey = "city";
580 napi_value neighborhoodKeyValue = GetResultValue(env, streetKey, resultSet);
581 napi_value cityKeyValue = GetResultValue(env, cityKey, resultSet);
582 napi_value poboxKeyValue = GetResultValue(env, poboxKey, resultSet);
583 napi_value postcodeKeyValue = GetResultValue(env, postcodeKey, resultSet);
584 napi_value regionKeyValue = GetResultValue(env, regionKey, resultSet);
585 napi_value streetKeyValue = GetResultValue(env, streetKey, resultSet);
586 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "postalAddress");
587 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
588 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
589 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
590 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
591 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
592 napi_set_property(
593 env, objectElement, CreateNapiStringValue(env, neighborhoodKey.c_str()), neighborhoodKeyValue);
594 napi_set_property(env, objectElement, CreateNapiStringValue(env, cityKey.c_str()), cityKeyValue);
595 napi_set_property(env, objectElement, CreateNapiStringValue(env, poboxKey.c_str()), poboxKeyValue);
596 napi_set_property(env, objectElement, CreateNapiStringValue(env, postcodeKey.c_str()), postcodeKeyValue);
597 napi_set_property(env, objectElement, CreateNapiStringValue(env, regionKey.c_str()), regionKeyValue);
598 napi_set_property(env, objectElement, CreateNapiStringValue(env, streetKey.c_str()), streetKeyValue);
599 napi_set_element(env, emailArray, count, objectElement);
600 napi_value napiElementKey = CreateNapiStringValue(env, postalAddresses);
601 napi_set_property(env, napiObject, napiElementKey, emailArray);
602 }
603 }
604
ConvertRelation(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)605 void ResultConvert::ConvertRelation(
606 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
607 {
608 if (typeId == RELATION) {
609 const std::string relations = "relations";
610 napi_value emailArray = GetNapiElementArray(env, napiObject, relations);
611 uint32_t count = 0;
612 napi_get_array_length(env, emailArray, &count);
613 napi_value objectElement;
614 napi_create_object(env, &objectElement);
615 std::string detailInfoKey = "detail_info";
616 std::string customDataKey = "custom_data";
617 std::string extend7Key = "extend7";
618 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
619 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
620 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
621 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "relationName");
622 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
623 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
624 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
625 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
626 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
627 napi_set_element(env, emailArray, count, objectElement);
628 napi_value napiElementKey;
629 napi_create_string_utf8(env, relations.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
630 napi_set_property(env, napiObject, napiElementKey, emailArray);
631 }
632 }
633
ConvertSipAddress(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)634 void ResultConvert::ConvertSipAddress(
635 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
636 {
637 if (typeId == SIP_ADDRESS) {
638 const std::string sipAddresses = "sipAddresses";
639 napi_value emailArray = GetNapiElementArray(env, napiObject, sipAddresses);
640 uint32_t count = 0;
641 napi_get_array_length(env, emailArray, &count);
642 napi_value objectElement;
643 napi_create_object(env, &objectElement);
644 std::string detailInfoKey = "detail_info";
645 std::string customDataKey = "custom_data";
646 std::string extend7Key = "extend7";
647 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
648 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
649 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
650 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "relationName");
651 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
652 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
653 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
654 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
655 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
656 napi_set_element(env, emailArray, count, objectElement);
657 napi_value napiElementKey;
658 napi_create_string_utf8(env, sipAddresses.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
659 napi_set_property(env, napiObject, napiElementKey, emailArray);
660 }
661 }
662
ConvertWebsite(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)663 void ResultConvert::ConvertWebsite(
664 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
665 {
666 if (typeId == WEBSITE) {
667 const std::string websites = "websites";
668 napi_value emailArray = GetNapiElementArray(env, napiObject, websites);
669 uint32_t count = 0;
670 napi_get_array_length(env, emailArray, &count);
671 napi_value objectElement;
672 napi_create_object(env, &objectElement);
673 std::string detailInfoKey = "detail_info";
674 std::string customDataKey = "custom_data";
675 std::string extend7Key = "extend7";
676 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
677 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
678 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
679 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "website");
680 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
681 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
682 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
683 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
684 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
685 napi_set_element(env, emailArray, count, objectElement);
686 napi_value napiElementKey;
687 napi_create_string_utf8(env, websites.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
688 napi_set_property(env, napiObject, napiElementKey, emailArray);
689 }
690 }
691
ConvertNickName(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)692 void ResultConvert::ConvertNickName(
693 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
694 {
695 if (typeId == NICKNAME) {
696 const std::string nickName = "nickName";
697 napi_value objectElement = GetNapiElementObject(env, napiObject, nickName);
698 std::string name = "detail_info";
699 napi_value uriValue = GetResultValue(env, name, resultSet);
700 napi_value napiUri = CreateNapiStringValue(env, "nickName");
701 napi_set_property(env, objectElement, napiUri, uriValue);
702 napi_value napiElementKey;
703 napi_create_string_utf8(env, nickName.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
704 napi_set_property(env, napiObject, napiElementKey, objectElement);
705 }
706 }
707
ConvertNote(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)708 void ResultConvert::ConvertNote(
709 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
710 {
711 if (typeId == NOTE) {
712 const std::string note = "note";
713 napi_value objectElement = GetNapiElementObject(env, napiObject, note);
714 std::string name = "detail_info";
715 napi_value noteValue = GetResultValue(env, name, resultSet);
716 napi_value noteKey = CreateNapiStringValue(env, "noteContent");
717 napi_set_property(env, objectElement, noteKey, noteValue);
718 napi_value napiElementKey;
719 napi_create_string_utf8(env, note.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
720 napi_set_property(env, napiObject, napiElementKey, objectElement);
721 }
722 }
723
ConvertOrganization(napi_env env,napi_value napiObject,int & typeId,std::shared_ptr<DataShare::DataShareResultSet> & resultSet)724 void ResultConvert::ConvertOrganization(
725 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
726 {
727 if (typeId == ORGANIZATION) {
728 const std::string organization = "organization";
729 napi_value objectElement = GetNapiElementObject(env, napiObject, organization);
730 std::string company = "detail_info";
731 std::string position = "position";
732 napi_value companyValue = GetResultValue(env, company, resultSet);
733 napi_value positionValue = GetResultValue(env, position, resultSet);
734 napi_value napiNameValueKey = CreateNapiStringValue(env, "name");
735 napi_set_property(env, objectElement, napiNameValueKey, companyValue);
736 napi_value napiTitleValueKey = CreateNapiStringValue(env, "title");
737 napi_set_property(env, objectElement, napiTitleValueKey, positionValue);
738 napi_value napiElementKey;
739 napi_create_string_utf8(env, organization.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
740 napi_set_property(env, napiObject, napiElementKey, objectElement);
741 }
742 }
743 } // namespace ContactsApi
744 } // namespace OHOS