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, "familyNamePhonetic");
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, "middleNamePhonetic");
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, "namePrefix");
422 napi_set_property(env, objectElement, napiNamePrefixKey, namePrefixValue);
423 napi_value napiNameSuffixKey = CreateNapiStringValue(env, "nameSuffix");
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 imAddressArray = GetNapiElementArray(env, napiObject, imAddresses);
506 uint32_t count = 0;
507 napi_get_array_length(env, imAddressArray, &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, imAddressArray, 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, imAddressArray);
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 phoneNumbersArray = GetNapiElementArray(env, napiObject, phoneNumbers);
535 uint32_t count = 0;
536 napi_get_array_length(env, phoneNumbersArray, &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, phoneNumbersArray, 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, phoneNumbersArray);
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 postalAddressArray = GetNapiElementArray(env, napiObject, postalAddresses);
564 uint32_t count = 0;
565 napi_get_array_length(env, postalAddressArray, &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 std::string countryKey = "country";
581 napi_value neighborhoodKeyValue = GetResultValue(env, neighborhoodKey, resultSet);
582 napi_value cityKeyValue = GetResultValue(env, cityKey, resultSet);
583 napi_value countryKeyValue = GetResultValue(env, countryKey, resultSet);
584 napi_value poboxKeyValue = GetResultValue(env, poboxKey, resultSet);
585 napi_value postcodeKeyValue = GetResultValue(env, postcodeKey, resultSet);
586 napi_value regionKeyValue = GetResultValue(env, regionKey, resultSet);
587 napi_value streetKeyValue = GetResultValue(env, streetKey, resultSet);
588 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "postalAddress");
589 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
590 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
591 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
592 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
593 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
594 napi_set_property(
595 env, objectElement, CreateNapiStringValue(env, neighborhoodKey.c_str()), neighborhoodKeyValue);
596 napi_set_property(env, objectElement, CreateNapiStringValue(env, cityKey.c_str()), cityKeyValue);
597 napi_set_property(env, objectElement, CreateNapiStringValue(env, countryKey.c_str()), countryKeyValue);
598 napi_set_property(env, objectElement, CreateNapiStringValue(env, poboxKey.c_str()), poboxKeyValue);
599 napi_set_property(env, objectElement, CreateNapiStringValue(env, postcodeKey.c_str()), postcodeKeyValue);
600 napi_set_property(env, objectElement, CreateNapiStringValue(env, regionKey.c_str()), regionKeyValue);
601 napi_set_property(env, objectElement, CreateNapiStringValue(env, streetKey.c_str()), streetKeyValue);
602 napi_set_element(env, postalAddressArray, count, objectElement);
603 napi_value napiElementKey = CreateNapiStringValue(env, postalAddresses);
604 napi_set_property(env, napiObject, napiElementKey, postalAddressArray);
605 }
606 }
607
ConvertRelation( napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)608 void ResultConvert::ConvertRelation(
609 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
610 {
611 if (typeId == RELATION) {
612 const std::string relations = "relations";
613 napi_value relationsArray = GetNapiElementArray(env, napiObject, relations);
614 uint32_t count = 0;
615 napi_get_array_length(env, relationsArray, &count);
616 napi_value objectElement;
617 napi_create_object(env, &objectElement);
618 std::string detailInfoKey = "detail_info";
619 std::string customDataKey = "custom_data";
620 std::string extend7Key = "extend7";
621 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
622 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
623 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
624 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "sipAddress");
625 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
626 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
627 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
628 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
629 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
630 napi_set_element(env, relationsArray, count, objectElement);
631 napi_value napiElementKey;
632 napi_create_string_utf8(env, relations.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
633 napi_set_property(env, napiObject, napiElementKey, relationsArray);
634 }
635 }
636
ConvertSipAddress( napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)637 void ResultConvert::ConvertSipAddress(
638 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
639 {
640 if (typeId == SIP_ADDRESS) {
641 const std::string sipAddresses = "sipAddresses";
642 napi_value sipAddressArray = GetNapiElementArray(env, napiObject, sipAddresses);
643 uint32_t count = 0;
644 napi_get_array_length(env, sipAddressArray, &count);
645 napi_value objectElement;
646 napi_create_object(env, &objectElement);
647 std::string detailInfoKey = "detail_info";
648 std::string customDataKey = "custom_data";
649 std::string extend7Key = "extend7";
650 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
651 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
652 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
653 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "relationName");
654 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
655 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
656 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
657 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
658 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
659 napi_set_element(env, sipAddressArray, count, objectElement);
660 napi_value napiElementKey;
661 napi_create_string_utf8(env, sipAddresses.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
662 napi_set_property(env, napiObject, napiElementKey, sipAddressArray);
663 }
664 }
665
ConvertWebsite( napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)666 void ResultConvert::ConvertWebsite(
667 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
668 {
669 if (typeId == WEBSITE) {
670 const std::string websites = "websites";
671 napi_value websitesArray = GetNapiElementArray(env, napiObject, websites);
672 uint32_t count = 0;
673 napi_get_array_length(env, websitesArray, &count);
674 napi_value objectElement;
675 napi_create_object(env, &objectElement);
676 std::string detailInfoKey = "detail_info";
677 std::string customDataKey = "custom_data";
678 std::string extend7Key = "extend7";
679 napi_value detailInfoValue = GetResultValue(env, detailInfoKey, resultSet);
680 napi_value customValue = GetResultValue(env, customDataKey, resultSet);
681 napi_value extend7Value = GetResultValue(env, extend7Key, resultSet);
682 napi_value napiDetailInfoKey = CreateNapiStringValue(env, "website");
683 napi_set_property(env, objectElement, napiDetailInfoKey, detailInfoValue);
684 napi_value napiLabelNameKey = CreateNapiStringValue(env, "labelName");
685 napi_set_property(env, objectElement, napiLabelNameKey, customValue);
686 napi_value napiLabelIdKey = CreateNapiStringValue(env, "labelId");
687 napi_set_property(env, objectElement, napiLabelIdKey, extend7Value);
688 napi_set_element(env, websitesArray, count, objectElement);
689 napi_value napiElementKey;
690 napi_create_string_utf8(env, websites.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
691 napi_set_property(env, napiObject, napiElementKey, websitesArray);
692 }
693 }
694
ConvertNickName( napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)695 void ResultConvert::ConvertNickName(
696 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
697 {
698 if (typeId == NICKNAME) {
699 const std::string nickName = "nickName";
700 napi_value objectElement = GetNapiElementObject(env, napiObject, nickName);
701 std::string name = "detail_info";
702 napi_value uriValue = GetResultValue(env, name, resultSet);
703 napi_value napiUri = CreateNapiStringValue(env, "nickName");
704 napi_set_property(env, objectElement, napiUri, uriValue);
705 napi_value napiElementKey;
706 napi_create_string_utf8(env, nickName.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
707 napi_set_property(env, napiObject, napiElementKey, objectElement);
708 }
709 }
710
ConvertNote( napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)711 void ResultConvert::ConvertNote(
712 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
713 {
714 if (typeId == NOTE) {
715 const std::string note = "note";
716 napi_value objectElement = GetNapiElementObject(env, napiObject, note);
717 std::string name = "detail_info";
718 napi_value noteValue = GetResultValue(env, name, resultSet);
719 napi_value noteKey = CreateNapiStringValue(env, "noteContent");
720 napi_set_property(env, objectElement, noteKey, noteValue);
721 napi_value napiElementKey;
722 napi_create_string_utf8(env, note.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
723 napi_set_property(env, napiObject, napiElementKey, objectElement);
724 }
725 }
726
ConvertOrganization( napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)727 void ResultConvert::ConvertOrganization(
728 napi_env env, napi_value napiObject, int &typeId, std::shared_ptr<DataShare::DataShareResultSet> &resultSet)
729 {
730 if (typeId == ORGANIZATION) {
731 const std::string organization = "organization";
732 napi_value objectElement = GetNapiElementObject(env, napiObject, organization);
733 std::string company = "detail_info";
734 std::string position = "position";
735 napi_value companyValue = GetResultValue(env, company, resultSet);
736 napi_value positionValue = GetResultValue(env, position, resultSet);
737 napi_value napiNameValueKey = CreateNapiStringValue(env, "name");
738 napi_set_property(env, objectElement, napiNameValueKey, companyValue);
739 napi_value napiTitleValueKey = CreateNapiStringValue(env, "title");
740 napi_set_property(env, objectElement, napiTitleValueKey, positionValue);
741 napi_value napiElementKey;
742 napi_create_string_utf8(env, organization.c_str(), NAPI_AUTO_LENGTH, &napiElementKey);
743 napi_set_property(env, napiObject, napiElementKey, objectElement);
744 }
745 }
746 } // namespace ContactsApi
747 } // namespace OHOS