• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "contacts_build.h"
17 
18 #include "result_convert.h"
19 
20 namespace OHOS {
21 namespace ContactsApi {
ContactsBuild(void)22 ContactsBuild::ContactsBuild(void)
23 {
24 }
25 
~ContactsBuild()26 ContactsBuild::~ContactsBuild()
27 {
28 }
29 
GetContactDataByObject(napi_env env,napi_value object,Contacts & contact)30 void ContactsBuild::GetContactDataByObject(napi_env env, napi_value object, Contacts &contact)
31 {
32     contact.id = GetIntValueByKey(env, object, "id");
33     contact.key = GetStringValueByKey(env, object, "key");
34     contact.emails = GetEmails(env, object);
35     contact.events = GetEvent(env, object);
36     contact.groups = GetGroup(env, object);
37     contact.imAddresses = GetImAddress(env, object);
38     contact.phoneNumbers = GetPhoneNumbers(env, object);
39     contact.portrait = GetUri(env, object);
40     contact.relations = GetRelation(env, object);
41     contact.sipAddresses = GetSipAddress(env, object);
42     contact.websites = GetWebsite(env, object);
43     contact.name = GetName(env, object);
44     contact.nickName = GetNickName(env, object);
45     contact.note = GetNote(env, object);
46     contact.organization = GetOrganization(env, object);
47     contact.postalAddresses = GetPostalAddress(env, object);
48 }
49 
GetContactData(napi_env env,napi_value object,std::vector<DataShare::DataShareValuesBucket> & valueContact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)50 void ContactsBuild::GetContactData(napi_env env, napi_value object,
51     std::vector<DataShare::DataShareValuesBucket> &valueContact,
52     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
53 {
54     Contacts contact;
55     GetContactDataByObject(env, object, contact);
56     BuildValueContact(contact, valueContact);
57     BuildValueContactData(contact, valueContactData);
58 }
59 
BuildValueContact(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContact)60 void ContactsBuild::BuildValueContact(Contacts &contact, std::vector<DataShare::DataShareValuesBucket> &valueContact)
61 {
62     DataShare::DataShareValuesBucket valuesBucketContact;
63     if (!contact.name.fullName.empty() || contact.name.fullName != "") {
64         valuesBucketContact.Put("display_name", contact.name.fullName);
65     }
66     if (!contact.organization.name.empty() || contact.organization.name != "") {
67         valuesBucketContact.Put("company", contact.organization.name);
68     }
69     if (!contact.organization.title.empty() || contact.organization.title != "") {
70         valuesBucketContact.Put("position", contact.organization.title);
71     }
72     valueContact.push_back(valuesBucketContact);
73 }
74 
BuildValueContactData(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)75 void ContactsBuild::BuildValueContactData(Contacts &contact,
76     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
77 {
78     GetValuesBucketEmail(contact, valueContactData);
79     GetValuesBucketEvent(contact, valueContactData);
80     GetValuesBucketGroup(contact, valueContactData);
81     GetValuesBucketImAddress(contact, valueContactData);
82     GetValuesBucketPortrait(contact, valueContactData);
83     GetValuesBucketPhoneNumber(contact, valueContactData);
84     GetValuesBucketPostalAddress(contact, valueContactData);
85     GetValuesBucketRelation(contact, valueContactData);
86     GetValuesBucketSipAddress(contact, valueContactData);
87     GetValuesBucketWebsite(contact, valueContactData);
88     GetValuesBucketName(contact, valueContactData);
89     GetValuesBucketNickName(contact, valueContactData);
90     GetValuesBucketNote(contact, valueContactData);
91     GetValuesBucketOrganization(contact, valueContactData);
92 }
93 
BuildValueContactDataByType(Contacts & contact,int typeId,std::vector<DataShare::DataShareValuesBucket> & valueContactData)94 void ContactsBuild::BuildValueContactDataByType(
95     Contacts &contact, int typeId, std::vector<DataShare::DataShareValuesBucket> &valueContactData)
96 {
97     switch (typeId) {
98         case EMAIL:
99             GetValuesBucketEmail(contact, valueContactData);
100             break;
101         case IM:
102             GetValuesBucketImAddress(contact, valueContactData);
103             break;
104         case NICKNAME:
105             GetValuesBucketNickName(contact, valueContactData);
106             break;
107         case ORGANIZATION:
108             GetValuesBucketOrganization(contact, valueContactData);
109             break;
110         case PHONE:
111             GetValuesBucketPhoneNumber(contact, valueContactData);
112             break;
113         case NAME:
114             GetValuesBucketName(contact, valueContactData);
115             break;
116         case POSTAL_ADDRESS:
117             GetValuesBucketPostalAddress(contact, valueContactData);
118             break;
119         default:
120             TypeSwitchSplit(typeId, contact, valueContactData);
121             break;
122     }
123 }
124 
TypeSwitchSplit(int typeId,Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)125 void ContactsBuild::TypeSwitchSplit(
126     int typeId, Contacts &contact, std::vector<DataShare::DataShareValuesBucket> &valueContactData)
127 {
128     switch (typeId) {
129         case PHOTO:
130             GetValuesBucketPortrait(contact, valueContactData);
131             break;
132         case GROUP_MEMBERSHIP:
133             GetValuesBucketGroup(contact, valueContactData);
134             break;
135         case NOTE:
136             GetValuesBucketNote(contact, valueContactData);
137             break;
138         case CONTACT_EVENT:
139             GetValuesBucketEvent(contact, valueContactData);
140             break;
141         case WEBSITE:
142             GetValuesBucketWebsite(contact, valueContactData);
143             break;
144         case RELATION:
145             GetValuesBucketRelation(contact, valueContactData);
146             break;
147         case CONTACT_MISC:
148             HILOG_INFO("TypeSwitchSplit is CONTACT_MISC ");
149             break;
150         case HICALL_DEVICE:
151             HILOG_INFO("TypeSwitchSplit is HICALL_DEVICE ");
152             break;
153         case CAMCARD:
154         case SIP_ADDRESS:
155             GetValuesBucketSipAddress(contact, valueContactData);
156             break;
157         default:
158             HILOG_ERROR("TypeSwitchSplit type is error ");
159             break;
160     }
161 }
162 
163 /**
164  * @brief Establish ValuesBucket condition in EMAIL case
165  *
166  * @param contact Conditions for establish ValuesBucket operation
167  * @param valueContactData Conditions for establish ValuesBucket operation
168  */
GetValuesBucketEmail(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)169 void ContactsBuild::GetValuesBucketEmail(Contacts &contact,
170     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
171 {
172     unsigned int emailsSize = contact.emails.size();
173     for (unsigned int i = 0; i < emailsSize; i++) {
174         DataShare::DataShareValuesBucket valuesBucketEmail;
175         valuesBucketEmail.Put("detail_info", contact.emails[i].email);
176         if (contact.emails[i].labelId != 0) {
177             valuesBucketEmail.Put("extend7", std::to_string(contact.emails[i].labelId));
178         }
179         if (!contact.emails[i].labelName.empty()) {
180             valuesBucketEmail.Put("custom_data", contact.emails[i].labelName);
181             valuesBucketEmail.Put("extend7", std::to_string(Email::CUSTOM_LABEL));
182         }
183         if (!contact.emails[i].displayName.empty()) {
184             valuesBucketEmail.Put("alias_detail_info", contact.emails[i].displayName);
185         }
186         valuesBucketEmail.Put("content_type", "email");
187         valueContactData.push_back(valuesBucketEmail);
188     }
189 }
190 
191 /**
192  * @brief Establish ValuesBucket condition in CONTACT_EVENT case
193  *
194  * @param contact Conditions for establish ValuesBucket operation
195  * @param valueContactData Conditions for establish ValuesBucket operation
196  */
GetValuesBucketEvent(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)197 void ContactsBuild::GetValuesBucketEvent(Contacts &contact,
198     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
199 {
200     unsigned int eventsSize = contact.events.size();
201     for (unsigned int i = 0; i < eventsSize; i++) {
202         DataShare::DataShareValuesBucket valuesBucketEvent;
203         valuesBucketEvent.Put("detail_info", contact.events[i].eventDate);
204         if (contact.events[i].labelId != 0) {
205             valuesBucketEvent.Put("extend7", std::to_string(contact.events[i].labelId));
206         }
207         if (!contact.events[i].labelName.empty()) {
208             valuesBucketEvent.Put("custom_data", contact.events[i].labelName);
209             valuesBucketEvent.Put("extend7", std::to_string(Event::CUSTOM_LABEL));
210         }
211         valuesBucketEvent.Put("content_type", "contact_event");
212         valueContactData.push_back(valuesBucketEvent);
213     }
214 }
215 
216 /**
217  * @brief Establish ValuesBucket condition in GROUP_MEMBERSHIP case
218  *
219  * @param contact Conditions for establish ValuesBucket operation
220  * @param valueContactData Conditions for establish ValuesBucket operation
221  */
GetValuesBucketGroup(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)222 void ContactsBuild::GetValuesBucketGroup(Contacts &contact,
223     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
224 {
225     unsigned int groupsSize = contact.groups.size();
226     for (unsigned int i = 0; i < groupsSize; i++) {
227         DataShare::DataShareValuesBucket valuesBucketGroup;
228         if (contact.groups[i].groupId != ERROR) {
229             valuesBucketGroup.Put("detail_info", std::to_string(contact.groups[i].groupId));
230         }
231         valuesBucketGroup.Put("alias_detail_info", contact.groups[i].title);
232         valuesBucketGroup.Put("content_type", "group_membership");
233         valueContactData.push_back(valuesBucketGroup);
234     }
235 }
236 
237 /**
238  * @brief Establish ValuesBucket condition in Im case
239  *
240  * @param contact Conditions for establish ValuesBucket operation
241  * @param valueContactData Conditions for establish ValuesBucket operation
242  */
GetValuesBucketImAddress(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)243 void ContactsBuild::GetValuesBucketImAddress(Contacts &contact,
244     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
245 {
246     unsigned int imAddressSize = contact.imAddresses.size();
247     for (unsigned int i = 0; i < imAddressSize; i++) {
248         DataShare::DataShareValuesBucket valuesBucketImAddress;
249         valuesBucketImAddress.Put("detail_info", contact.imAddresses[i].imAddress);
250         if (contact.imAddresses[i].labelId != 0) {
251             valuesBucketImAddress.Put("extend7", std::to_string(contact.imAddresses[i].labelId));
252         }
253         if (!contact.imAddresses[i].labelName.empty()) {
254             valuesBucketImAddress.Put("custom_data", contact.imAddresses[i].labelName);
255             valuesBucketImAddress.Put("extend7", std::to_string(ImAddress::CUSTOM_LABEL));
256         }
257         valuesBucketImAddress.Put("content_type", "im");
258         valueContactData.push_back(valuesBucketImAddress);
259     }
260 }
261 
262 /**
263  * @brief Establish ValuesBucket condition in PHOTO case
264  *
265  * @param contact Conditions for establish ValuesBucket operation
266  * @param valueContactData Conditions for establish ValuesBucket operation
267  */
GetValuesBucketPortrait(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)268 void ContactsBuild::GetValuesBucketPortrait(Contacts &contact,
269     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
270 {
271     if (!contact.portrait.uri.empty() || contact.portrait.uri != "") {
272         DataShare::DataShareValuesBucket valuesBucketPortrait;
273         valuesBucketPortrait.Put("detail_info", contact.portrait.uri);
274         valuesBucketPortrait.Put("content_type", "photo");
275         valueContactData.push_back(valuesBucketPortrait);
276     }
277 }
278 
279 /**
280  * @brief Establish ValuesBucket condition in PHONE case
281  *
282  * @param contact Conditions for establish ValuesBucket operation
283  * @param valueContactData Conditions for establish ValuesBucket operation
284  */
GetValuesBucketPhoneNumber(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)285 void ContactsBuild::GetValuesBucketPhoneNumber(
286     Contacts &contact, std::vector<DataShare::DataShareValuesBucket> &valueContactData)
287 {
288     unsigned int phoneNumbersSize = contact.phoneNumbers.size();
289     for (unsigned int i = 0; i < phoneNumbersSize; i++) {
290         DataShare::DataShareValuesBucket valuesBucketPhoneNumber;
291         valuesBucketPhoneNumber.Put("detail_info", contact.phoneNumbers[i].phoneNumber);
292         if (contact.phoneNumbers[i].labelId != 0) {
293             valuesBucketPhoneNumber.Put("extend7", std::to_string(contact.phoneNumbers[i].labelId));
294         }
295         if (!contact.phoneNumbers[i].labelName.empty()) {
296             valuesBucketPhoneNumber.Put("custom_data", contact.phoneNumbers[i].labelName);
297             valuesBucketPhoneNumber.Put("extend7", std::to_string(PhoneNumber::CUSTOM_LABEL));
298         }
299         valuesBucketPhoneNumber.Put("content_type", "phone");
300         valueContactData.push_back(valuesBucketPhoneNumber);
301     }
302 }
303 
304 /**
305  * @brief Establish ValuesBucket condition in POSTAL_ADDRESS case
306  *
307  * @param contact Conditions for establish ValuesBucket operation
308  * @param valueContactData Conditions for establish ValuesBucket operation
309  */
GetValuesBucketPostalAddress(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)310 void ContactsBuild::GetValuesBucketPostalAddress(
311     Contacts &contact, std::vector<DataShare::DataShareValuesBucket> &valueContactData)
312 {
313     unsigned int postalAddressesSize = contact.postalAddresses.size();
314     for (unsigned int i = 0; i < postalAddressesSize; i++) {
315         DataShare::DataShareValuesBucket valuesBucketPostalAddress;
316         valuesBucketPostalAddress.Put("detail_info", contact.postalAddresses[i].postalAddress);
317         if (contact.postalAddresses[i].labelId != 0) {
318             valuesBucketPostalAddress.Put("extend7", std::to_string(contact.postalAddresses[i].labelId));
319         }
320         if (!contact.postalAddresses[i].labelName.empty()) {
321             valuesBucketPostalAddress.Put("custom_data", contact.postalAddresses[i].labelName);
322             valuesBucketPostalAddress.Put("extend7", std::to_string(PostalAddress::CUSTOM_LABEL));
323         }
324         if (!contact.postalAddresses[i].neighborhood.empty()) {
325             valuesBucketPostalAddress.Put("neighborhood", contact.postalAddresses[i].neighborhood);
326         }
327         if (!contact.postalAddresses[i].pobox.empty()) {
328             valuesBucketPostalAddress.Put("pobox", contact.postalAddresses[i].pobox);
329         }
330         if (!contact.postalAddresses[i].postcode.empty()) {
331             valuesBucketPostalAddress.Put("postcode", contact.postalAddresses[i].postcode);
332         }
333         if (!contact.postalAddresses[i].region.empty()) {
334             valuesBucketPostalAddress.Put("region", contact.postalAddresses[i].region);
335         }
336         if (!contact.postalAddresses[i].street.empty()) {
337             valuesBucketPostalAddress.Put("street", contact.postalAddresses[i].street);
338         }
339         if (!contact.postalAddresses[i].city.empty()) {
340             valuesBucketPostalAddress.Put("city", contact.postalAddresses[i].city);
341         }
342         if (!contact.postalAddresses[i].country.empty()) {
343             valuesBucketPostalAddress.Put("country", contact.postalAddresses[i].country);
344         }
345         valuesBucketPostalAddress.Put("content_type", "postal_address");
346         valueContactData.push_back(valuesBucketPostalAddress);
347     }
348 }
349 
350 /**
351  * @brief Establish ValuesBucket condition in RELATION case
352  *
353  * @param contact Conditions for establish ValuesBucket operation
354  * @param valueContactData Conditions for establish ValuesBucket operation
355  */
GetValuesBucketRelation(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)356 void ContactsBuild::GetValuesBucketRelation(Contacts &contact,
357     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
358 {
359     unsigned int relationsSize = contact.relations.size();
360     for (unsigned int i = 0; i < relationsSize; i++) {
361         DataShare::DataShareValuesBucket valuesBucketRelation;
362         valuesBucketRelation.Put("detail_info", contact.relations[i].relationName);
363         if (contact.relations[i].labelId != 0) {
364             valuesBucketRelation.Put("extend7", std::to_string(contact.relations[i].labelId));
365         }
366         if (!contact.relations[i].labelName.empty()) {
367             valuesBucketRelation.Put("custom_data", contact.relations[i].labelName);
368             valuesBucketRelation.Put("extend7", std::to_string(Relation::CUSTOM_LABEL));
369         }
370         valuesBucketRelation.Put("content_type", "relation");
371         valueContactData.push_back(valuesBucketRelation);
372     }
373 }
374 
375 /**
376  * @brief Establish ValuesBucket condition in SIP_ADDRESS case
377  *
378  * @param contact Conditions for establish ValuesBucket operation
379  * @param valueContactData Conditions for establish ValuesBucket operation
380  */
GetValuesBucketSipAddress(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)381 void ContactsBuild::GetValuesBucketSipAddress(Contacts &contact,
382     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
383 {
384     unsigned int sipAddressesSize = contact.sipAddresses.size();
385     for (unsigned int i = 0; i < sipAddressesSize; i++) {
386         DataShare::DataShareValuesBucket valuesBucketSipAddress;
387         valuesBucketSipAddress.Put("detail_info", contact.sipAddresses[i].sipAddress);
388         if (contact.sipAddresses[i].labelId != 0) {
389             valuesBucketSipAddress.Put("extend7", std::to_string(contact.sipAddresses[i].labelId));
390         }
391         if (!contact.sipAddresses[i].labelName.empty()) {
392             valuesBucketSipAddress.Put("custom_data", contact.sipAddresses[i].labelName);
393             valuesBucketSipAddress.Put("extend7", std::to_string(SipAddress::CUSTOM_LABEL));
394         }
395         valuesBucketSipAddress.Put("content_type", "sip_address");
396         valueContactData.push_back(valuesBucketSipAddress);
397     }
398 }
399 
400 /**
401  * @brief Establish ValuesBucket condition in WEBSITE case
402  *
403  * @param contact Conditions for establish ValuesBucket operation
404  * @param valueContactData Conditions for establish ValuesBucket operation
405  */
GetValuesBucketWebsite(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)406 void ContactsBuild::GetValuesBucketWebsite(Contacts &contact,
407     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
408 {
409     unsigned int websitesSize = contact.websites.size();
410     for (unsigned int i = 0; i < websitesSize; i++) {
411         DataShare::DataShareValuesBucket valuesBucketWebsite;
412         valuesBucketWebsite.Put("detail_info", contact.websites[i].website);
413         valuesBucketWebsite.Put("content_type", "website");
414         valueContactData.push_back(valuesBucketWebsite);
415     }
416 }
417 
418 /**
419  * @brief Establish ValuesBucket condition in NAME case
420  *
421  * @param contact Conditions for establish ValuesBucket operation
422  * @param valueContactData Conditions for establish ValuesBucket operation
423  */
GetValuesBucketName(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)424 void ContactsBuild::GetValuesBucketName(Contacts &contact,
425     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
426 {
427     if (!contact.name.fullName.empty() || contact.name.fullName != "") {
428         DataShare::DataShareValuesBucket valuesBucketName;
429         valuesBucketName.Put("detail_info", contact.name.fullName);
430         if (!contact.name.namePrefix.empty()) {
431             valuesBucketName.Put("alpha_name", contact.name.namePrefix);
432         }
433         if (!contact.name.middleName.empty()) {
434             valuesBucketName.Put("other_lan_last_name", contact.name.middleName);
435         }
436         if (!contact.name.nameSuffix.empty()) {
437             valuesBucketName.Put("other_lan_first_name", contact.name.nameSuffix);
438         }
439         if (!contact.name.familyName.empty()) {
440             valuesBucketName.Put("family_name", contact.name.familyName);
441         }
442         if (!contact.name.middleNamePhonetic.empty()) {
443             valuesBucketName.Put("middle_name_phonetic", contact.name.middleNamePhonetic);
444         }
445         if (!contact.name.givenName.empty()) {
446             valuesBucketName.Put("given_name", contact.name.givenName);
447         }
448         if (!contact.name.givenNamePhonetic.empty()) {
449             valuesBucketName.Put("given_name_phonetic", contact.name.givenNamePhonetic);
450         }
451         if (!contact.name.familyNamePhonetic.empty()) {
452             valuesBucketName.Put("phonetic_name", contact.name.familyNamePhonetic);
453         }
454         valuesBucketName.Put("content_type", "name");
455         valueContactData.push_back(valuesBucketName);
456     }
457 }
458 
459 /**
460  * @brief Establish ValuesBucket condition in NICKNAME case
461  *
462  * @param contact Conditions for establish ValuesBucket operation
463  * @param valueContactData Conditions for establish ValuesBucket operation
464  */
GetValuesBucketNickName(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)465 void ContactsBuild::GetValuesBucketNickName(Contacts &contact,
466     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
467 {
468     if (!contact.nickName.nickName.empty() || contact.nickName.nickName != "") {
469         DataShare::DataShareValuesBucket valuesBucketNickName;
470         valuesBucketNickName.Put("detail_info", contact.nickName.nickName);
471         valuesBucketNickName.Put("content_type", "nickname");
472         valueContactData.push_back(valuesBucketNickName);
473     }
474 }
475 
476 /**
477  * @brief Establish ValuesBucket condition in NOTE case
478  *
479  * @param contact Conditions for establish ValuesBucket operation
480  * @param valueContactData Conditions for establish ValuesBucket operation
481  */
GetValuesBucketNote(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)482 void ContactsBuild::GetValuesBucketNote(Contacts &contact,
483     std::vector<DataShare::DataShareValuesBucket> &valueContactData)
484 {
485     if (!contact.note.noteContent.empty() || contact.note.noteContent != "") {
486         DataShare::DataShareValuesBucket valuesBucketNote;
487         valuesBucketNote.Put("detail_info", contact.note.noteContent);
488         valuesBucketNote.Put("content_type", "note");
489         valueContactData.push_back(valuesBucketNote);
490     }
491 }
492 
493 /**
494  * @brief Establish ValuesBucket condition in ORGANIZATION case
495  *
496  * @param contact Conditions for establish ValuesBucket operation
497  * @param valueContactData Conditions for establish ValuesBucket operation
498  */
GetValuesBucketOrganization(Contacts & contact,std::vector<DataShare::DataShareValuesBucket> & valueContactData)499 void ContactsBuild::GetValuesBucketOrganization(
500     Contacts &contact, std::vector<DataShare::DataShareValuesBucket> &valueContactData)
501 {
502     if (!contact.organization.name.empty()) {
503         DataShare::DataShareValuesBucket valuesBucketData;
504         valuesBucketData.Put("detail_info", contact.organization.name);
505         if (!contact.organization.title.empty()) {
506             valuesBucketData.Put("position", contact.organization.title);
507         }
508         valuesBucketData.Put("content_type", "organization");
509         valueContactData.push_back(valuesBucketData);
510     }
511 }
512 
GetObjectByKey(napi_env env,napi_value object,std::string key)513 napi_value ContactsBuild::GetObjectByKey(napi_env env, napi_value object, std::string key)
514 {
515     ResultConvert resultConvert;
516     return resultConvert.GetNapiValue(env, key.c_str(), object);
517 }
518 
GetArrayByKey(napi_env env,napi_value valueObject,std::string key)519 napi_value ContactsBuild::GetArrayByKey(napi_env env, napi_value valueObject, std::string key)
520 {
521     ResultConvert resultConvert;
522     napi_value array = resultConvert.GetNapiValue(env, key.c_str(), valueObject);
523     bool isArray = false;
524     napi_is_array(env, array, &isArray);
525     if (!isArray) {
526         HILOG_INFO("ContactsBuild GetArrayByKey value is not array");
527         return nullptr;
528     }
529     return array;
530 }
531 
GetStringValueByKey(napi_env env,napi_value valueObject,std::string key)532 std::string ContactsBuild::GetStringValueByKey(napi_env env, napi_value valueObject, std::string key)
533 {
534     ResultConvert resultConvert;
535     napi_value value = resultConvert.GetNapiValue(env, key.c_str(), valueObject);
536     std::string result = NapiGetValueString(env, value);
537     return result;
538 }
539 
GetIntValueByKey(napi_env env,napi_value valueObject,std::string key)540 int ContactsBuild::GetIntValueByKey(napi_env env, napi_value valueObject, std::string key)
541 {
542     ResultConvert resultConvert;
543     napi_value value = resultConvert.GetNapiValue(env, key.c_str(), valueObject);
544     if (value == nullptr) {
545         return ERROR;
546     }
547     int64_t result;
548     napi_get_value_int64(env, value, &result);
549     int code = result;
550     return code;
551 }
552 
GetName(napi_env env,napi_value object)553 Name ContactsBuild::GetName(napi_env env, napi_value object)
554 {
555     HILOG_INFO("ContactsBuild into GetName");
556     Name name;
557     if (object == nullptr) {
558         HILOG_ERROR("ContactsBuild GetName  nameKey is null ");
559         return name;
560     }
561     napi_value nameObj = GetObjectByKey(env, object, "name");
562     napi_valuetype valueType;
563     napi_typeof(env, nameObj, &valueType);
564     if (nameObj == nullptr || valueType != napi_object) {
565         HILOG_ERROR("ContactsBuild GetName nameObj is null or object type is not object");
566         return name;
567     }
568     name.familyName = GetStringValueByKey(env, nameObj, "familyName");
569     name.middleNamePhonetic = GetStringValueByKey(env, nameObj, "middleNamePhonetic");
570     name.givenName = GetStringValueByKey(env, nameObj, "givenName");
571     name.givenNamePhonetic = GetStringValueByKey(env, nameObj, "givenNamePhonetic");
572     name.familyNamePhonetic = GetStringValueByKey(env, nameObj, "familyNamePhonetic");
573     name.fullName = GetStringValueByKey(env, nameObj, "fullName");
574     name.middleName = GetStringValueByKey(env, nameObj, "middleName");
575     name.namePrefix = GetStringValueByKey(env, nameObj, "namePrefix");
576     name.nameSuffix = GetStringValueByKey(env, nameObj, "nameSuffix");
577     return name;
578 }
579 
GetUri(napi_env env,napi_value object)580 Portrait ContactsBuild::GetUri(napi_env env, napi_value object)
581 {
582     Portrait portrait;
583     napi_value portraitObj = GetObjectByKey(env, object, "portrait");
584     napi_valuetype valueType;
585     napi_typeof(env, portraitObj, &valueType);
586     if (portraitObj == nullptr || valueType != napi_object) {
587         HILOG_ERROR("ContactsBuild GetUri portraitObj is null or object type is not object");
588         return portrait;
589     }
590     portrait.uri = GetStringValueByKey(env, portraitObj, "uri");
591     return portrait;
592 }
593 
GetEmails(napi_env env,napi_value object)594 std::vector<Email> ContactsBuild::GetEmails(napi_env env, napi_value object)
595 {
596     std::vector<Email> emailVec;
597     napi_value EmailArray = GetArrayByKey(env, object, "emails");
598     if (EmailArray == nullptr) {
599         HILOG_ERROR("ContactsBuild GetEmail napiValueEmail is null ");
600         return emailVec;
601     }
602     uint32_t size = 0;
603     napi_get_array_length(env, EmailArray, &size);
604     for (uint32_t i = 0; i < size; i++) {
605         Email email;
606         napi_value object;
607         napi_get_element(env, EmailArray, i, &object);
608         email.email = GetStringValueByKey(env, object, "email");
609         email.labelName = GetStringValueByKey(env, object, "labelName");
610         email.displayName = GetStringValueByKey(env, object, "displayName");
611         email.labelId = GetIntValueByKey(env, object, "labelId");
612         emailVec.push_back(email);
613     }
614     return emailVec;
615 }
616 
GetEvent(napi_env env,napi_value object)617 std::vector<Event> ContactsBuild::GetEvent(napi_env env, napi_value object)
618 {
619     napi_value eventArray = GetArrayByKey(env, object, "events");
620     if (eventArray == nullptr) {
621         HILOG_ERROR("ContactsBuild GetEvent arrKey is null ");
622         return std::vector<Event>();
623     }
624     uint32_t size = 0;
625     napi_get_array_length(env, eventArray, &size);
626     std::vector<Event> resultVec;
627     for (uint32_t i = 0; i < size; i++) {
628         napi_value obj;
629         napi_get_element(env, eventArray, i, &obj);
630         Event eventObj;
631         eventObj.eventDate = GetStringValueByKey(env, obj, "eventDate");
632         eventObj.labelName = GetStringValueByKey(env, obj, "labelName");
633         eventObj.labelId = GetIntValueByKey(env, obj, "labelId");
634         resultVec.push_back(eventObj);
635     }
636     return resultVec;
637 }
638 
GetGroup(napi_env env,napi_value object)639 std::vector<Group> ContactsBuild::GetGroup(napi_env env, napi_value object)
640 {
641     napi_value groupArray = GetArrayByKey(env, object, "groups");
642     std::vector<Group> resultVec;
643     if (groupArray == nullptr) {
644         HILOG_ERROR("ContactsBuild GetGroup arrKey is null ");
645         return resultVec;
646     }
647     uint32_t size = 0;
648     napi_get_array_length(env, groupArray, &size);
649     for (uint32_t i = 0; i < size; i++) {
650         napi_value obj;
651         napi_get_element(env, groupArray, i, &obj);
652         Group groupObj;
653         groupObj.groupId = GetIntValueByKey(env, obj, "groupId");
654         groupObj.title = GetStringValueByKey(env, obj, "title");
655         resultVec.push_back(groupObj);
656     }
657     return resultVec;
658 }
659 
GetImAddress(napi_env env,napi_value object)660 std::vector<ImAddress> ContactsBuild::GetImAddress(napi_env env, napi_value object)
661 {
662     napi_value imAddressArray = GetArrayByKey(env, object, "imAddresses");
663     std::vector<ImAddress> resultVec;
664     if (imAddressArray == nullptr) {
665         HILOG_ERROR("ContactsBuild GetImAddress arrKey is null ");
666         return resultVec;
667     }
668     uint32_t size = 0;
669     napi_get_array_length(env, imAddressArray, &size);
670     for (uint32_t i = 0; i < size; i++) {
671         napi_value obj;
672         napi_get_element(env, imAddressArray, i, &obj);
673         ImAddress targetObj;
674         targetObj.imAddress = GetStringValueByKey(env, obj, "imAddress");
675         targetObj.labelName = GetStringValueByKey(env, obj, "labelName");
676         targetObj.labelId = GetIntValueByKey(env, obj, "labelId");
677         resultVec.push_back(targetObj);
678     }
679     return resultVec;
680 }
681 
GetPhoneNumbers(napi_env env,napi_value object)682 std::vector<PhoneNumber> ContactsBuild::GetPhoneNumbers(napi_env env, napi_value object)
683 {
684     std::vector<PhoneNumber> resultVec;
685     napi_value phoneNumberArray = GetArrayByKey(env, object, "phoneNumbers");
686     if (phoneNumberArray == nullptr) {
687         HILOG_ERROR("ContactsBuild GetPhoneNumber napiValuePhoneNumber is null ");
688         return resultVec;
689     }
690     uint32_t size = 0;
691     napi_get_array_length(env, phoneNumberArray, &size);
692     for (uint32_t i = 0; i < size; i++) {
693         PhoneNumber phones;
694         napi_value obj;
695         napi_get_element(env, phoneNumberArray, i, &obj);
696         phones.phoneNumber = GetStringValueByKey(env, obj, "phoneNumber");
697         phones.labelName = GetStringValueByKey(env, obj, "labelName");
698         phones.labelId = GetIntValueByKey(env, obj, "labelId");
699         resultVec.push_back(phones);
700     }
701     return resultVec;
702 }
703 
GetPostalAddress(napi_env env,napi_value object)704 std::vector<PostalAddress> ContactsBuild::GetPostalAddress(napi_env env, napi_value object)
705 {
706     napi_value postalAddressArray = GetArrayByKey(env, object, "postalAddresses");
707     std::vector<PostalAddress> resultVec;
708     if (postalAddressArray == nullptr) {
709         HILOG_ERROR("GetPostalAddress arrKey is null ");
710         return resultVec;
711     }
712     uint32_t size = 0;
713     napi_get_array_length(env, postalAddressArray, &size);
714     for (uint32_t i = 0; i < size; i++) {
715         napi_value obj;
716         napi_get_element(env, postalAddressArray, i, &obj);
717         PostalAddress targetObj;
718         targetObj.city = GetStringValueByKey(env, obj, "city");
719         targetObj.country = GetStringValueByKey(env, obj, "country");
720         targetObj.labelName = GetStringValueByKey(env, obj, "labelName");
721         targetObj.neighborhood = GetStringValueByKey(env, obj, "neighborhood");
722         targetObj.pobox = GetStringValueByKey(env, obj, "pobox");
723         targetObj.postalAddress = GetStringValueByKey(env, obj, "postalAddress");
724         targetObj.postcode = GetStringValueByKey(env, obj, "postcode");
725         targetObj.region = GetStringValueByKey(env, obj, "region");
726         targetObj.street = GetStringValueByKey(env, obj, "street");
727         targetObj.labelId = GetIntValueByKey(env, obj, "labelId");
728         resultVec.push_back(targetObj);
729     }
730     return resultVec;
731 }
732 
GetRelation(napi_env env,napi_value object)733 std::vector<Relation> ContactsBuild::GetRelation(napi_env env, napi_value object)
734 {
735     napi_value relationArray = GetArrayByKey(env, object, "relations");
736     std::vector<Relation> resultVec;
737     if (relationArray == nullptr) {
738         HILOG_ERROR("GetRelation arrKey is null ");
739         return resultVec;
740     }
741     uint32_t size = 0;
742     napi_get_array_length(env, relationArray, &size);
743     for (uint32_t i = 0; i < size; i++) {
744         napi_value obj;
745         napi_get_element(env, relationArray, i, &obj);
746         Relation targetObj;
747         targetObj.relationName = GetStringValueByKey(env, obj, "relationName");
748         targetObj.labelName = GetStringValueByKey(env, obj, "labelName");
749         targetObj.labelId = GetIntValueByKey(env, obj, "labelId");
750         resultVec.push_back(targetObj);
751     }
752     return resultVec;
753 }
754 
GetSipAddress(napi_env env,napi_value object)755 std::vector<SipAddress> ContactsBuild::GetSipAddress(napi_env env, napi_value object)
756 {
757     napi_value sipAddressArray = GetArrayByKey(env, object, "sipAddresses");
758     std::vector<SipAddress> resultVec;
759     if (sipAddressArray == nullptr) {
760         HILOG_ERROR("GetSipAddress arrKey is null ");
761         return resultVec;
762     }
763     uint32_t size = 0;
764     napi_get_array_length(env, sipAddressArray, &size);
765     for (uint32_t i = 0; i < size; i++) {
766         napi_value obj;
767         napi_get_element(env, sipAddressArray, i, &obj);
768         SipAddress targetObj;
769         targetObj.sipAddress = GetStringValueByKey(env, obj, "sipAddress");
770         targetObj.labelName = GetStringValueByKey(env, obj, "labelName");
771         targetObj.labelId = GetIntValueByKey(env, obj, "labelId");
772         resultVec.push_back(targetObj);
773     }
774     return resultVec;
775 }
776 
GetWebsite(napi_env env,napi_value object)777 std::vector<Website> ContactsBuild::GetWebsite(napi_env env, napi_value object)
778 {
779     napi_value websiteArray = GetArrayByKey(env, object, "websites");
780     std::vector<Website> resultVec;
781     if (websiteArray == nullptr) {
782         HILOG_ERROR("ContactsBuild GetWebsite arrKey is null ");
783         return resultVec;
784     }
785     uint32_t size = 0;
786     napi_get_array_length(env, websiteArray, &size);
787     for (uint32_t i = 0; i < size; i++) {
788         napi_value obj;
789         napi_get_element(env, websiteArray, i, &obj);
790         Website targetObj;
791         targetObj.website = GetStringValueByKey(env, obj, "website");
792         resultVec.push_back(targetObj);
793     }
794     return resultVec;
795 }
796 
GetNickName(napi_env env,napi_value object)797 NickName ContactsBuild::GetNickName(napi_env env, napi_value object)
798 {
799     HILOG_INFO("ContactsBuild into GetNickName");
800     napi_value nickNameObj = GetObjectByKey(env, object, "nickName");
801     NickName resultObj;
802     if (nickNameObj == nullptr) {
803         HILOG_ERROR("ContactsBuild GetNickName nickNameKey is null ");
804         return resultObj;
805     }
806     resultObj.nickName = GetStringValueByKey(env, nickNameObj, "nickName");
807     return resultObj;
808 }
809 
GetNote(napi_env env,napi_value object)810 Note ContactsBuild::GetNote(napi_env env, napi_value object)
811 {
812     Note resultObj;
813     napi_value noteObj = GetObjectByKey(env, object, "note");
814     if (noteObj == nullptr) {
815         HILOG_ERROR("GetNote noteKey is null ");
816         return resultObj;
817     }
818     resultObj.noteContent = GetStringValueByKey(env, noteObj, "noteContent");
819     return resultObj;
820 }
821 
GetOrganization(napi_env env,napi_value object)822 Organization ContactsBuild::GetOrganization(napi_env env, napi_value object)
823 {
824     napi_value organizationObject = GetObjectByKey(env, object, "organization");
825     Organization resultObj;
826     if (organizationObject == nullptr) {
827         HILOG_ERROR("GetOrganization organizationKey is null ");
828         return resultObj;
829     }
830     resultObj.name = GetStringValueByKey(env, organizationObject, "name");
831     resultObj.title = GetStringValueByKey(env, organizationObject, "title");
832     return resultObj;
833 }
834 
GetInt(napi_env env,napi_value id)835 int ContactsBuild::GetInt(napi_env env, napi_value id)
836 {
837     int64_t value = 0;
838     if (id == nullptr) {
839         HILOG_ERROR("GetInt id is 0");
840         return value;
841     }
842     napi_get_value_int64(env, id, &value);
843     return value;
844 }
845 
GetHolder(napi_env env,napi_value object)846 Holder ContactsBuild::GetHolder(napi_env env, napi_value object)
847 {
848     Holder holder;
849     if (object == nullptr) {
850         HILOG_ERROR("GetHolder Holder is null ");
851         return holder;
852     }
853     holder.bundleName = GetStringValueByKey(env, object, "bundleName");
854     holder.displayName = GetStringValueByKey(env, object, "displayName");
855     holder.holderId = GetIntValueByKey(env, object, "holderId");
856     HILOG_INFO(" ContactsBuild::GetHolder int id = %{public}d", holder.holderId);
857     return holder;
858 }
859 
GetContactAttributes(napi_env env,napi_value object)860 ContactAttributes ContactsBuild::GetContactAttributes(napi_env env, napi_value object)
861 {
862     ContactAttributes contactAttributes;
863     if (object == nullptr) {
864         HILOG_ERROR("GetContactAttributes object is null ");
865         return contactAttributes;
866     }
867     napi_value napiValueAttr = GetArrayByKey(env, object, "attributes");
868     std::vector<int> attrVector;
869     uint32_t size = 0;
870     napi_get_array_length(env, napiValueAttr, &size);
871     for (uint32_t i = 0; i < size; i++) {
872         napi_value intValue;
873         napi_get_element(env, napiValueAttr, i, &intValue);
874         int64_t intNapiValue;
875         napi_get_value_int64(env, intValue, &intNapiValue);
876         if (intNapiValue != 0) {
877             attrVector.push_back(intNapiValue);
878         }
879     }
880     contactAttributes.attributes = attrVector;
881     return contactAttributes;
882 }
883 
NapiGetValueString(napi_env env,napi_value value)884 std::string ContactsBuild::NapiGetValueString(napi_env env, napi_value value)
885 {
886     if (value == nullptr) {
887         return "";
888     }
889     char valueString[NAPI_GET_STRING_SIZE];
890     size_t valueSize = NAPI_GET_STRING_SIZE;
891     size_t resultSize = 0;
892     napi_get_value_string_utf8(env, value, valueString, valueSize, &resultSize);
893     std::string resultValue = valueString;
894     if (resultValue == "") {
895         HILOG_ERROR("ContactsBuild NapiGetValueString Data error");
896         return "";
897     }
898     return resultValue;
899 }
900 } // namespace ContactsApi
901 } // namespace OHOS