2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file ContactObjectA2PConverter.cpp
18 * @author Kisub Song (kisubs.song@samsung.com)
20 * @brief Converter (TizenApis::Api::Contact::ContactPtr -> CTSstruct*)
23 #include "ContactObjectA2PConverter.h"
25 #include <Commons/Exception.h>
26 #include "ContactUtility.h"
27 #include "query-svc/query-service.h"
33 using namespace TizenApis::Api::Contact;
34 using namespace WrtDeviceApis::Commons;
37 static const char *EMPTY_STRING = "";
39 ContactObjectA2PConverter::ContactObjectA2PConverter(const ContactPtr &abstractContact,
41 m_abstractContact(abstractContact),
42 m_platformContact(NULL),
43 m_forScratch(forScratch),
44 m_convertFinished(false),
45 m_platformContactOwnership(false)
49 ContactObjectA2PConverter::ContactObjectA2PConverter(const ContactPtr &abstractContact,
51 CTSstruct* platformContact) :
52 m_abstractContact(abstractContact),
53 m_platformContact(platformContact),
54 m_forScratch(forScratch),
55 m_convertFinished(false),
56 m_platformContactOwnership(false)
60 ContactObjectA2PConverter::~ContactObjectA2PConverter()
62 if(m_platformContactOwnership && m_platformContact != NULL)
64 contacts_svc_struct_free(m_platformContact);
65 m_platformContact = NULL;
66 m_platformContactOwnership = false;
70 CTSstruct* ContactObjectA2PConverter::getPlatformContact()
74 if(m_abstractContact == NULL)
76 LogError("Abstract contact object did not set");
77 ThrowMsg(InvalidArgumentException, "Abstract contact object did not set");
80 if(m_platformContact == NULL)
82 if(m_abstractContact->getIdIsSet() && (m_forScratch == false))
84 int id = ContactUtility::strToInt(m_abstractContact->getId());
85 LogDebug("Load platform object id : " << id);
86 contacts_svc_get_contact(id, &m_platformContact);
90 LogDebug("New platform object has been created");
91 m_platformContact = contacts_svc_struct_new(CTS_STRUCT_CONTACT);
94 m_platformContactOwnership = true;
97 LogDebug("for scratch : " << m_forScratch);
101 if(m_convertFinished == false)
102 convertToPlatformObject();
106 LogError("Error while converting - " << _rethrown_exception.GetMessage());
107 ThrowMsg(PlatformException, "Fail to convert abstract object to platform object.");
110 return m_platformContact;
113 void ContactObjectA2PConverter::convertToPlatformObject()
115 importBaseInfoValue();
117 importCompanyValue();
118 // importNoteValue();
121 importGrouprelList();
125 importNicknameList();
127 m_convertFinished = true;
130 void ContactObjectA2PConverter::importBaseInfoValue()
133 CTSvalue *ctsValue = NULL;
135 errorCode = contacts_svc_struct_get_value(m_platformContact, CTS_CF_BASE_INFO_VALUE, &ctsValue);
136 if(errorCode != CTS_SUCCESS || ctsValue == NULL)
138 ctsValue = contacts_svc_value_new(CTS_VALUE_CONTACT_BASE_INFO);
140 ThrowMsg(UnknownException, "creating base info value (ctsValue:NULL)");
142 importBaseInfoValueToNewValue(ctsValue);
146 importBaseInfoValueToExistingValue(ctsValue);
149 contacts_svc_struct_store_value(m_platformContact, CTS_CF_BASE_INFO_VALUE, ctsValue);
150 contacts_svc_value_free(ctsValue);
153 void ContactObjectA2PConverter::importBaseInfoValueToExistingValue(CTSvalue *ctsValue)
157 const char *newValueStr = NULL;
158 const char *oldValueStr = NULL;
159 string abstractValueStr;
162 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_BASE_VAL_IMG_PATH_STR);
163 abstractValueStr = ContactUtility::convertUriToPath(m_abstractContact->getPhotoURI());
164 if(oldValueStr != NULL &&
165 (!m_abstractContact->getPhotoURIIsSet() || m_abstractContact->getPhotoURI().empty()))
167 newValueStr = EMPTY_STRING;
169 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
171 newValueStr = abstractValueStr.c_str();
174 if(newValueStr != NULL)
176 errorCode = contacts_svc_value_set_str(ctsValue, CTS_BASE_VAL_IMG_PATH_STR, newValueStr);
177 if(errorCode != CTS_SUCCESS)
179 contacts_svc_value_free(ctsValue);
180 ThrowMsg(PlatformException, "importing photoURI E (err:" <<
181 errorCode << ", str:" << abstractValueStr << ")");
185 // Contact.ringtoneURI
187 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_BASE_VAL_RINGTONE_PATH_STR);
188 abstractValueStr = ContactUtility::convertUriToPath(m_abstractContact->getRingtoneURI());
189 if(oldValueStr != NULL &&
190 (!m_abstractContact->getRingtoneURIIsSet() || m_abstractContact->getRingtoneURI().empty()))
192 newValueStr = EMPTY_STRING;
194 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
196 newValueStr = abstractValueStr.c_str();
199 if(newValueStr != NULL)
201 errorCode = contacts_svc_value_set_str(ctsValue, CTS_BASE_VAL_RINGTONE_PATH_STR, newValueStr);
202 if(errorCode != CTS_SUCCESS)
204 contacts_svc_value_free(ctsValue);
205 ThrowMsg(PlatformException, "importing ringtoneURI E (err:" <<
206 errorCode << ", str:" << abstractValueStr << ")");
212 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_BASE_VAL_NOTE_STR);
213 abstractValueStr = m_abstractContact->getNote();
214 if(oldValueStr != NULL && (!m_abstractContact->getNoteIsSet() || abstractValueStr.empty()) )
216 newValueStr = EMPTY_STRING;
218 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
220 newValueStr = abstractValueStr.c_str();
223 if(newValueStr != NULL)
225 errorCode = contacts_svc_value_set_str(ctsValue, CTS_BASE_VAL_NOTE_STR, newValueStr);
226 if(errorCode != CTS_SUCCESS)
228 contacts_svc_value_free(ctsValue);
229 ThrowMsg(PlatformException, "importing note E (err:" <<
230 errorCode << ", str:" << newValueStr << ")");
235 void ContactObjectA2PConverter::importBaseInfoValueToNewValue(CTSvalue *ctsValue)
240 if(m_abstractContact->getPhotoURIIsSet())
242 string photoURI = ContactUtility::convertUriToPath(m_abstractContact->getPhotoURI());
243 if(!photoURI.empty())
245 errorCode = contacts_svc_value_set_str(ctsValue, CTS_BASE_VAL_IMG_PATH_STR, photoURI.c_str());
246 if(errorCode != CTS_SUCCESS)
248 contacts_svc_value_free(ctsValue);
249 ThrowMsg(PlatformException, "importing photoURI N (err: " <<
250 errorCode << ", str:" << photoURI << ")");
255 // Contact.ringtoneURI
256 if(m_abstractContact->getRingtoneURIIsSet())
258 string ringtoneURI = ContactUtility::convertUriToPath(m_abstractContact->getRingtoneURI());
259 if(!ringtoneURI.empty())
261 errorCode = contacts_svc_value_set_str(ctsValue, CTS_BASE_VAL_RINGTONE_PATH_STR, ringtoneURI.c_str());
262 if(errorCode != CTS_SUCCESS)
264 contacts_svc_value_free(ctsValue);
265 ThrowMsg(PlatformException, "importing ringtoneURI N (err:" <<
266 errorCode << ", str:" << ringtoneURI << ")");
272 if(m_abstractContact->getNoteIsSet())
274 string note = m_abstractContact->getNote();
275 if(note != EMPTY_STRING)
277 errorCode = contacts_svc_value_set_str(ctsValue, CTS_BASE_VAL_NOTE_STR, note.c_str());
278 if(errorCode != CTS_SUCCESS)
280 contacts_svc_value_free(ctsValue);
281 ThrowMsg(PlatformException, "importing note N (err:" <<
282 errorCode << ", str:" << note << ")");
288 void ContactObjectA2PConverter::importNameValue()
291 CTSvalue *ctsValue = NULL;
293 ContactNamePtr contactName = m_abstractContact->getName();
294 if(contactName == NULL ||
295 (( !contactName->getFirstNameIsSet() || contactName->getFirstName().empty() )
296 && ( !contactName->getLastNameIsSet() || contactName->getLastName().empty() )
297 && ( !contactName->getMiddleNameIsSet() || contactName->getMiddleName().empty() )
298 // && ( !contactName->getPhoneticFirstNameIsSet() || contactName->getPhoneticFirstName().empty() )
299 // && ( !contactName->getPhoneticLastNameIsSet() || contactName->getPhoneticLastName().empty() )
300 && ( !contactName->getPrefixIsSet() || contactName->getPrefix().empty() )
301 && ( !contactName->getDisplayNameIsSet() || contactName->getDisplayName().empty() ) ) )
303 ctsValue = contacts_svc_value_new(CTS_VALUE_NAME);
305 ThrowMsg(UnknownException, "creating name value A (ctsValue:NULL)");
306 contacts_svc_struct_store_value(m_platformContact, CTS_CF_NAME_VALUE, ctsValue);
310 errorCode = contacts_svc_struct_get_value(m_platformContact, CTS_CF_NAME_VALUE, &ctsValue);
311 if(errorCode != CTS_SUCCESS || ctsValue == NULL)
313 ctsValue = contacts_svc_value_new(CTS_VALUE_NAME);
315 ThrowMsg(UnknownException, "creating name value B (ctsValue:NULL)");
317 importNameValueToNewValue(ctsValue, contactName);
321 importNameValueToExistingValue(ctsValue, contactName);
324 contacts_svc_struct_store_value(m_platformContact, CTS_CF_NAME_VALUE, ctsValue);
325 contacts_svc_value_free(ctsValue);
328 void ContactObjectA2PConverter::importNameValueToExistingValue(CTSvalue *ctsValue, ContactNamePtr &contactName)
332 const char *newValueStr = NULL;
333 const char *oldValueStr = NULL;
334 string abstractValueStr;
336 // ContactName.firstName
337 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_FIRST_STR);
338 abstractValueStr = contactName->getFirstName();
339 if(oldValueStr != NULL && (!contactName->getFirstNameIsSet() || abstractValueStr.empty()) )
341 newValueStr = EMPTY_STRING;
343 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
345 newValueStr = abstractValueStr.c_str();
348 if(newValueStr != NULL)
350 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_FIRST_STR, newValueStr);
351 if(errorCode != CTS_SUCCESS)
353 contacts_svc_value_free(ctsValue);
354 ThrowMsg(PlatformException, "importing firstName E (err:" <<
355 errorCode << ", str:" << newValueStr << ")");
359 // ContactName.lastName
361 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_LAST_STR);
362 abstractValueStr = contactName->getLastName();
363 if(oldValueStr != NULL && (!contactName->getLastNameIsSet() || abstractValueStr.empty()) )
365 newValueStr = EMPTY_STRING;
367 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
369 newValueStr = abstractValueStr.c_str();
372 if(newValueStr != NULL)
374 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_LAST_STR, newValueStr);
375 if(errorCode != CTS_SUCCESS)
377 contacts_svc_value_free(ctsValue);
378 ThrowMsg(PlatformException, "importing lastName E (err:" <<
379 errorCode << ", str:" << newValueStr << ")");
383 // ContactName.middleName
385 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_ADDITION_STR);
386 abstractValueStr = contactName->getMiddleName();
387 if(oldValueStr != NULL && (!contactName->getMiddleNameIsSet() || abstractValueStr.empty()) )
389 newValueStr = EMPTY_STRING;
391 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
393 newValueStr = abstractValueStr.c_str();
396 if(newValueStr != NULL)
398 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_ADDITION_STR, newValueStr);
399 if(errorCode != CTS_SUCCESS)
401 contacts_svc_value_free(ctsValue);
402 ThrowMsg(PlatformException, "importing middleName E (err:" <<
403 errorCode << ", str:" << newValueStr << ")");
407 // ContactName.prefix
409 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_PREFIX_STR);
410 abstractValueStr = contactName->getPrefix();
411 if(oldValueStr != NULL && (!contactName->getPrefixIsSet() || abstractValueStr.empty()) )
413 newValueStr = EMPTY_STRING;
415 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
417 newValueStr = abstractValueStr.c_str();
420 if(newValueStr != NULL)
422 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_PREFIX_STR, newValueStr);
423 if(errorCode != CTS_SUCCESS)
425 contacts_svc_value_free(ctsValue);
426 ThrowMsg(PlatformException, "importing prefix E (err:" <<
427 errorCode << ", str:" << newValueStr << ")");
431 // // ContactName.phoneticFirstName
432 // newValueStr = NULL;
433 // oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_PHONETIC_FIRST_STR);
434 // abstractValueStr = contactName->getPhoneticFirstName();
435 // if(oldValueStr != NULL && (!contactName->getPhoneticFirstNameIsSet() || abstractValueStr.empty()) )
437 // newValueStr = EMPTY_STRING;
439 // else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
441 // newValueStr = abstractValueStr.c_str();
444 // if(newValueStr != NULL)
446 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_PHONETIC_FIRST_STR, newValueStr);
447 // if(errorCode != CTS_SUCCESS)
449 // contacts_svc_value_free(ctsValue);
450 // ThrowMsg(PlatformException, "importing phoneticFirstName E (err:" <<
451 // errorCode << ", str:" << newValueStr << ")");
455 // // ContactName.phoneticLastName
456 // newValueStr = NULL;
457 // oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_PHONETIC_LAST_STR);
458 // abstractValueStr = contactName->getPhoneticLastName();
459 // if(oldValueStr != NULL && (!contactName->getPhoneticLastNameIsSet() || abstractValueStr.empty()) )
461 // newValueStr = EMPTY_STRING;
463 // else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
465 // newValueStr = abstractValueStr.c_str();
468 // if(newValueStr != NULL)
470 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_PHONETIC_LAST_STR, newValueStr);
471 // if(errorCode != CTS_SUCCESS)
473 // contacts_svc_value_free(ctsValue);
474 // ThrowMsg(PlatformException, "importing phoneticLastName E (err:" <<
475 // errorCode << ", str:" << newValueStr << ")");
479 // ContactName.displayName
481 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_DISPLAY_STR);
482 abstractValueStr = contactName->getDisplayName();
483 if(oldValueStr != NULL && (!contactName->getDisplayNameIsSet() || abstractValueStr.empty()) )
485 newValueStr = EMPTY_STRING;
487 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
489 newValueStr = abstractValueStr.c_str();
492 if(newValueStr != NULL)
494 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_DISPLAY_STR, newValueStr);
495 if(errorCode != CTS_SUCCESS)
497 contacts_svc_value_free(ctsValue);
498 ThrowMsg(PlatformException, "importing displayName E (err:" <<
499 errorCode << ", str:" << newValueStr << ")");
504 void ContactObjectA2PConverter::importNameValueToNewValue(CTSvalue *ctsValue, ContactNamePtr &contactName)
508 // ContactName.firstName
509 if(contactName->getFirstNameIsSet())
511 string firstName = contactName->getFirstName();
512 if(firstName != EMPTY_STRING)
514 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_FIRST_STR, firstName.c_str());
515 if(errorCode != CTS_SUCCESS)
517 contacts_svc_value_free(ctsValue);
518 ThrowMsg(PlatformException, "importing firstName N (err:" <<
519 errorCode << ", str:" << firstName << ")");
524 // ContactName.lastName
525 if(contactName->getLastNameIsSet())
527 string lastName = contactName->getLastName();
528 if(lastName != EMPTY_STRING)
530 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_LAST_STR, lastName.c_str());
531 if(errorCode != CTS_SUCCESS)
533 contacts_svc_value_free(ctsValue);
534 ThrowMsg(PlatformException, "importing lastName N (err:" <<
535 errorCode << ", str:" << lastName << ")");
540 // ContactName.middleName
541 if(contactName->getMiddleNameIsSet())
543 string middleName = contactName->getMiddleName();
544 if(middleName != EMPTY_STRING)
546 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_ADDITION_STR, middleName.c_str());
547 if(errorCode != CTS_SUCCESS)
549 contacts_svc_value_free(ctsValue);
550 ThrowMsg(PlatformException, "importing middleName N (err:" <<
551 errorCode << ", str:" << middleName << ")");
556 // ContactName.prefix
557 if(contactName->getPrefixIsSet())
559 string prefix = contactName->getPrefix();
560 if(prefix != EMPTY_STRING)
562 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_PREFIX_STR, prefix.c_str());
563 if(errorCode != CTS_SUCCESS)
565 contacts_svc_value_free(ctsValue);
566 ThrowMsg(PlatformException, "importing prefix N (err:" <<
567 errorCode << ", str:" << prefix << ")");
572 // // ContactName.phoneticFirstName
573 // if(contactName->getPhoneticFirstNameIsSet())
575 // string phoneticFirstName = contactName->getPhoneticFirstName();
576 // if(phoneticFirstName != EMPTY_STRING)
578 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_PHONETIC_FIRST_STR, phoneticFirstName.c_str());
579 // if(errorCode != CTS_SUCCESS)
581 // contacts_svc_value_free(ctsValue);
582 // ThrowMsg(PlatformException, "importing phoneticFirstName N (err:" <<
583 // errorCode << ", str:" << phoneticFirstName << ")");
588 // // ContactName.phoneticLastName
589 // if(contactName->getPhoneticLastNameIsSet())
591 // string phoneticLastName = contactName->getPhoneticLastName();
592 // if(phoneticLastName != EMPTY_STRING)
594 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_PHONETIC_LAST_STR, phoneticLastName.c_str());
595 // if(errorCode != CTS_SUCCESS)
597 // contacts_svc_value_free(ctsValue);
598 // ThrowMsg(PlatformException, "importing phoneticLastName N (err:" <<
599 // errorCode << ", str:" << phoneticLastName << ")");
604 // ContactName.displayName
605 if(contactName->getDisplayNameIsSet())
607 string displayName = contactName->getDisplayName();
608 if(displayName != EMPTY_STRING)
610 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NAME_VAL_DISPLAY_STR, displayName.c_str());
611 if(errorCode != CTS_SUCCESS)
613 contacts_svc_value_free(ctsValue);
614 ThrowMsg(PlatformException, "importing displayName N (err:" <<
615 errorCode << ", str:" << displayName << ")");
621 void ContactObjectA2PConverter::importCompanyValue()
624 CTSvalue *ctsValue = NULL;
626 ContactOrganizationPtr contactOrganization = m_abstractContact->getOrganization();
627 if(contactOrganization == NULL ||
628 ( (!contactOrganization->getNameIsSet() || contactOrganization->getName().empty() )
629 && (!contactOrganization->getDepartmentIsSet() || contactOrganization->getDepartment().empty() )
630 && (!contactOrganization->getTitleIsSet() || contactOrganization->getTitle().empty() )
631 && (!contactOrganization->getRoleIsSet() || contactOrganization->getRole().empty() ) ) )
633 ctsValue = contacts_svc_value_new(CTS_VALUE_COMPANY);
635 ThrowMsg(UnknownException, "creating company value A");
636 contacts_svc_struct_store_value(m_platformContact, CTS_CF_COMPANY_VALUE, ctsValue);
640 errorCode = contacts_svc_struct_get_value(m_platformContact, CTS_CF_COMPANY_VALUE, &ctsValue);
641 if(errorCode != CTS_SUCCESS || ctsValue == NULL)
643 ctsValue = contacts_svc_value_new(CTS_VALUE_COMPANY);
645 ThrowMsg(UnknownException, "creating company value B");
647 importCompanyValueToNewValue(ctsValue, contactOrganization);
651 importCompanyValueToExistingValue(ctsValue, contactOrganization);
655 contacts_svc_struct_store_value(m_platformContact, CTS_CF_COMPANY_VALUE, ctsValue);
656 contacts_svc_value_free(ctsValue);
659 void ContactObjectA2PConverter::importCompanyValueToExistingValue(CTSvalue *ctsValue, ContactOrganizationPtr &contactOrganization)
663 const char *newValueStr = NULL;
664 const char *oldValueStr = NULL;
665 string abstractValueStr;
667 // ContactOrganization.name
668 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_COMPANY_VAL_NAME_STR);
669 abstractValueStr = contactOrganization->getName();
670 if(oldValueStr != NULL && (!contactOrganization->getNameIsSet() || abstractValueStr.empty()) )
672 newValueStr = EMPTY_STRING;
674 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
676 newValueStr = abstractValueStr.c_str();
679 if(newValueStr != NULL)
681 errorCode = contacts_svc_value_set_str(ctsValue, CTS_COMPANY_VAL_NAME_STR, newValueStr);
682 if(errorCode != CTS_SUCCESS)
684 contacts_svc_value_free(ctsValue);
685 ThrowMsg(PlatformException, "importing company name E (err:" <<
686 errorCode << ", str:" << newValueStr << ")");
690 // ContactOrganization.department
692 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_COMPANY_VAL_DEPARTMENT_STR);
693 abstractValueStr = contactOrganization->getDepartment();
694 if(oldValueStr != NULL && (!contactOrganization->getDepartmentIsSet() || abstractValueStr.empty()) )
696 newValueStr = EMPTY_STRING;
698 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
700 newValueStr = abstractValueStr.c_str();
703 if(newValueStr != NULL)
705 errorCode = contacts_svc_value_set_str(ctsValue, CTS_COMPANY_VAL_DEPARTMENT_STR, newValueStr);
706 if(errorCode != CTS_SUCCESS)
708 contacts_svc_value_free(ctsValue);
709 ThrowMsg(PlatformException, "importing department E (err:" <<
710 errorCode << ", str:" << newValueStr << ")");
714 // ContactOrganization.title
716 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_COMPANY_VAL_JOB_TITLE_STR);
717 abstractValueStr = contactOrganization->getTitle();
718 if(oldValueStr != NULL && (!contactOrganization->getTitleIsSet() || abstractValueStr.empty()) )
720 newValueStr = EMPTY_STRING;
722 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
724 newValueStr = abstractValueStr.c_str();
727 if(newValueStr != NULL)
729 errorCode = contacts_svc_value_set_str(ctsValue, CTS_COMPANY_VAL_JOB_TITLE_STR, newValueStr);
730 if(errorCode != CTS_SUCCESS)
732 contacts_svc_value_free(ctsValue);
733 ThrowMsg(PlatformException, "importing jobTitle E (err:" <<
734 errorCode << ", str:" << newValueStr << ")");
738 // ContactOrganization.role
740 oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_COMPANY_VAL_ROLE_STR);
741 abstractValueStr = contactOrganization->getRole();
742 if(oldValueStr != NULL && (!contactOrganization->getRoleIsSet() || abstractValueStr.empty()) )
744 newValueStr = EMPTY_STRING;
746 else if(oldValueStr == NULL || abstractValueStr != oldValueStr)
748 newValueStr = abstractValueStr.c_str();
751 if(newValueStr != NULL)
753 errorCode = contacts_svc_value_set_str(ctsValue, CTS_COMPANY_VAL_ROLE_STR, newValueStr);
754 if(errorCode != CTS_SUCCESS)
756 contacts_svc_value_free(ctsValue);
757 ThrowMsg(PlatformException, "importing role E (err:" <<
758 errorCode << ", str:" << newValueStr << ")");
763 void ContactObjectA2PConverter::importCompanyValueToNewValue(CTSvalue *ctsValue, ContactOrganizationPtr &contactOrganization)
767 // ContactOrganization.name
768 if(contactOrganization->getNameIsSet())
770 string name = contactOrganization->getName();
773 errorCode = contacts_svc_value_set_str(ctsValue, CTS_COMPANY_VAL_NAME_STR, name.c_str());
774 if(errorCode != CTS_SUCCESS)
776 contacts_svc_value_free(ctsValue);
777 ThrowMsg(PlatformException, "importing company name N (err:" <<
778 errorCode << ", str:" << name << ")");
783 // ContactOrganization.department
784 if(contactOrganization->getDepartmentIsSet())
786 string department = contactOrganization->getDepartment();
787 if(!department.empty())
789 errorCode = contacts_svc_value_set_str(ctsValue, CTS_COMPANY_VAL_DEPARTMENT_STR, department.c_str());
790 if(errorCode != CTS_SUCCESS)
792 contacts_svc_value_free(ctsValue);
793 ThrowMsg(PlatformException, "importing department N (err:" <<
794 errorCode << ", str:" << department << ")");
799 // ContactOrganization.title
800 if(contactOrganization->getTitleIsSet())
802 string title = contactOrganization->getTitle();
805 errorCode = contacts_svc_value_set_str(ctsValue, CTS_COMPANY_VAL_JOB_TITLE_STR, title.c_str());
806 if(errorCode != CTS_SUCCESS)
808 contacts_svc_value_free(ctsValue);
809 ThrowMsg(PlatformException, "importing title N (err:" <<
810 errorCode << ", str:" << title << ")");
815 // ContactOrganization.role
816 if(contactOrganization->getRoleIsSet())
818 string role = contactOrganization->getRole();
821 errorCode = contacts_svc_value_set_str(ctsValue, CTS_COMPANY_VAL_ROLE_STR, role.c_str());
822 if(errorCode != CTS_SUCCESS)
824 contacts_svc_value_free(ctsValue);
825 ThrowMsg(PlatformException, "importing role N (err:" <<
826 errorCode << ", str:" << role << ")");
832 //void ContactObjectA2PConverter::importNoteValue()
834 // int errorCode = 0;
835 // CTSvalue *ctsValue = NULL;
837 // errorCode = contacts_svc_struct_get_value(m_platformContact, CTS_CF_NOTE_VALUE, &ctsValue);
838 // if(errorCode != CTS_SUCCESS || ctsValue == NULL)
840 // ctsValue = contacts_svc_value_new(CTS_VALUE_NOTE);
841 // if(ctsValue == NULL)
842 // ThrowMsg(UnknownException, "creating note value (ctsValue:NULL)");
844 // importNoteValueToNewValue(ctsValue);
848 // importNoteValueToExistingValue(ctsValue);
851 // contacts_svc_struct_store_value(m_platformContact, CTS_CF_NOTE_VALUE, ctsValue);
852 // contacts_svc_value_free(ctsValue);
855 //void ContactObjectA2PConverter::importNoteValueToExistingValue(CTSvalue *ctsValue)
857 // int errorCode = 0;
859 // const char *newValueStr = NULL;
860 // const char *oldValueStr = NULL;
863 // oldValueStr = contacts_svc_value_get_str(ctsValue, CTS_NOTE_VAL_NOTE_STR);
864 // string note = m_abstractContact->getNote();
865 // if(oldValueStr != NULL && (!m_abstractContact->getNoteIsSet() || note.empty()) )
867 // newValueStr = EMPTY_STRING;
869 // else if(oldValueStr == NULL || note != oldValueStr)
871 // newValueStr = note.c_str();
874 // if(newValueStr != NULL)
876 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_NOTE_VAL_NOTE_STR, newValueStr);
877 // if(errorCode != CTS_SUCCESS)
879 // contacts_svc_value_free(ctsValue);
880 // ThrowMsg(PlatformException, "importing note E (err:" <<
881 // errorCode << ", str:" << newValueStr << ")");
886 //void ContactObjectA2PConverter::importNoteValueToNewValue(CTSvalue *ctsValue)
888 // int errorCode = 0;
890 // if(m_abstractContact->getNoteIsSet())
892 // string note = m_abstractContact->getNote();
895 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_NOTE_VAL_NOTE_STR, note.c_str());
896 // if(errorCode != CTS_SUCCESS)
898 // contacts_svc_value_free(ctsValue);
899 // ThrowMsg(PlatformException, "importing note N (err:" <<
900 // errorCode << ", str:" << note << ")");
906 void ContactObjectA2PConverter::importNumberList()
910 GSList *gsList = NULL;
911 GSList *gsListIter = NULL;
913 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_NUMBER_LIST, &gsList);
914 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
916 ThrowMsg(PlatformException, "getting number list (err:" <<
917 errorCode << ", gsList:" << gsList << ")");
921 for(; gsListIter; gsListIter = g_slist_next(gsListIter))
923 CTSvalue* ctsValue = static_cast<CTSvalue*>(gsListIter->data);
924 errorCode = contacts_svc_value_set_bool(ctsValue, CTS_NUM_VAL_DELETE_BOOL, true);
925 if(errorCode != CTS_SUCCESS)
927 ThrowMsg(PlatformException, "clearing number list (err:" << errorCode << ")");
931 ContactPhoneNumberArrayPtr phoneNumbers = m_abstractContact->getPhoneNumbers();
932 if(phoneNumbers->size() == 0)
935 ContactPhoneNumberArray::iterator phoneNumbersIter = phoneNumbers->begin();
936 for(; phoneNumbersIter != phoneNumbers->end(); phoneNumbersIter++)
938 ContactPhoneNumberPtr phoneNumber = *phoneNumbersIter;
939 ContactPhoneNumberTypeArrayPtr types = phoneNumber->getTypes();
941 if(!phoneNumber->getNumberIsSet() || phoneNumber->getNumber().empty())
943 LogDebug("Number was not set.");
947 string number = phoneNumber->getNumber();
950 bool ctsBoolDefault = false;
951 char *ctsStrCustomType = NULL;
953 ContactPhoneNumberTypeArray::iterator typesIter = types->begin();
954 for(; typesIter != types->end(); typesIter++)
956 ContactPhoneNumberType type = *typesIter;
957 if(type == CONTACT_PHONE_NUMBER_TYPE_HOME)
958 ctsIntType = ctsIntType | CTS_NUM_TYPE_HOME;
959 else if(type == CONTACT_PHONE_NUMBER_TYPE_WORK)
960 ctsIntType = ctsIntType | CTS_NUM_TYPE_WORK;
961 else if(type == CONTACT_PHONE_NUMBER_TYPE_VOICE)
962 ctsIntType = ctsIntType | CTS_NUM_TYPE_VOICE;
963 else if(type == CONTACT_PHONE_NUMBER_TYPE_FAX)
964 ctsIntType = ctsIntType | CTS_NUM_TYPE_FAX;
965 else if(type == CONTACT_PHONE_NUMBER_TYPE_MSG)
966 ctsIntType = ctsIntType | CTS_NUM_TYPE_MSG;
967 else if(type == CONTACT_PHONE_NUMBER_TYPE_CELL)
968 ctsIntType = ctsIntType | CTS_NUM_TYPE_CELL;
969 else if(type == CONTACT_PHONE_NUMBER_TYPE_PAGER)
970 ctsIntType = ctsIntType | CTS_NUM_TYPE_PAGER;
971 else if(type == CONTACT_PHONE_NUMBER_TYPE_BBS)
972 ctsIntType = ctsIntType | CTS_NUM_TYPE_BBS;
973 else if(type == CONTACT_PHONE_NUMBER_TYPE_MODEM)
974 ctsIntType = ctsIntType | CTS_NUM_TYPE_MODEM;
975 else if(type == CONTACT_PHONE_NUMBER_TYPE_CAR)
976 ctsIntType = ctsIntType | CTS_NUM_TYPE_CAR;
977 else if(type == CONTACT_PHONE_NUMBER_TYPE_ISDN)
978 ctsIntType = ctsIntType | CTS_NUM_TYPE_ISDN;
979 else if(type == CONTACT_PHONE_NUMBER_TYPE_VIDEO)
980 ctsIntType = ctsIntType | CTS_NUM_TYPE_VIDEO;
981 else if(type == CONTACT_PHONE_NUMBER_TYPE_PCS)
982 ctsIntType = ctsIntType | CTS_NUM_TYPE_PCS;
983 else if(type == CONTACT_PHONE_NUMBER_TYPE_PREF)
984 ctsBoolDefault = true;
987 // TODO Will be added after type changed to string
988 // ctsIntType = ctsIntType | CTS_NUM_TYPE_CUSTOM;
989 // ctsStrCustomType = ...;
993 CTSvalue *ctsValue = contacts_svc_value_new(CTS_VALUE_NUMBER);
996 LogWarning("Fail to create CTSvalue with contacts_svc_value_new(CTS_VALUE_NUMBER)");
1000 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NUM_VAL_NUMBER_STR, number.c_str());
1001 if(errorCode != CTS_SUCCESS)
1003 LogWarning("Fail to set number value to ctsValue str : " << number);
1004 contacts_svc_value_free(ctsValue);
1008 errorCode = contacts_svc_value_set_bool(ctsValue, CTS_NUM_VAL_DEFAULT_BOOL, ctsBoolDefault);
1009 if(errorCode != CTS_SUCCESS)
1011 LogWarning("Fail to set favorite value to ctsValue default : " << ctsBoolDefault);
1012 contacts_svc_value_free(ctsValue);
1016 errorCode = contacts_svc_value_set_int(ctsValue, CTS_NUM_VAL_TYPE_INT, ctsIntType);
1017 if(errorCode != CTS_SUCCESS)
1019 LogWarning("Fail to set default value to ctsValue type : " << ctsIntType);
1020 contacts_svc_value_free(ctsValue);
1024 // if(ctsStrCustomType != NULL)
1026 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_NUM_VAL_LABEL_STR, ctsStrCustomType);
1027 // if(errorCode != CTS_SUCCESS)
1029 // LogWarning("Fail to set custom value to ctsValue type : " << ctsStrCustomType);
1030 // contacts_svc_value_free(ctsValue);
1035 gsList = g_slist_append(gsList, ctsValue);
1038 contacts_svc_struct_store_list(m_platformContact, CTS_CF_NUMBER_LIST, gsList);
1040 for (; gsList; gsList = g_slist_next(gsList))
1041 contacts_svc_value_free(static_cast<CTSvalue*>(gsList->data));
1043 g_slist_free(gsList);
1046 void ContactObjectA2PConverter::importEmailList()
1050 GSList *gsList = NULL;
1051 GSList *gsListIter = NULL;
1053 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_EMAIL_LIST, &gsList);
1054 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
1056 ThrowMsg(PlatformException, "getting email list (err:" <<
1057 errorCode << ", gsList:" << gsList << ")");
1060 gsListIter = gsList;
1061 for(; gsListIter; gsListIter = g_slist_next(gsListIter))
1063 CTSvalue* ctsValue = static_cast<CTSvalue*>(gsListIter->data);
1064 errorCode = contacts_svc_value_set_bool(ctsValue, CTS_EMAIL_VAL_DELETE_BOOL, true);
1065 if(errorCode != CTS_SUCCESS)
1067 ThrowMsg(PlatformException, "clearing email list (err:" << errorCode << ")");
1071 ContactEmailAddressArrayPtr emails = m_abstractContact->getEmails();
1072 if(emails->size() == 0)
1075 ContactEmailAddressArray::iterator emailsIter = emails->begin();
1076 for(; emailsIter != emails->end(); emailsIter++)
1078 ContactEmailAddressPtr email = *emailsIter;
1079 ContactEmailAddressTypeArrayPtr types = email->getTypes();
1081 if(!email->getEmailIsSet() || email->getEmail().empty())
1083 LogDebug("email address was not set.");
1087 string emailAddress = email->getEmail();
1090 bool ctsBoolDefault = false;
1091 char *ctsStrCustomType = NULL;
1093 ContactEmailAddressTypeArray::iterator typesIter = types->begin();
1094 for(; typesIter != types->end(); typesIter++)
1096 ContactEmailAddressType type = *typesIter;
1097 if(type == CONTACT_EMAIL_TYPE_HOME)
1098 ctsIntType = ctsIntType | CTS_EMAIL_TYPE_HOME;
1099 else if(type == CONTACT_EMAIL_TYPE_WORK)
1100 ctsIntType = ctsIntType | CTS_EMAIL_TYPE_WORK;
1101 else if(type == CONTACT_EMAIL_TYPE_PREF)
1102 ctsBoolDefault = true;
1105 // TODO Will be added after type changed to string
1106 // ctsIntType = ctsIntType | CTS_EMAIL_TYPE_CUSTOM;
1107 // ctsStrCustomType = ...;
1111 CTSvalue *ctsValue = contacts_svc_value_new(CTS_VALUE_EMAIL);
1112 if(ctsValue == NULL)
1114 LogWarning("Fail to create CTSvalue with contacts_svc_value_new(CTS_VALUE_EMAIL)");
1118 errorCode = contacts_svc_value_set_str(ctsValue, CTS_EMAIL_VAL_ADDR_STR, emailAddress.c_str());
1119 if(errorCode != CTS_SUCCESS)
1121 LogWarning("Fail to set email value to ctsValue str : " << emailAddress);
1122 contacts_svc_value_free(ctsValue);
1126 errorCode = contacts_svc_value_set_bool(ctsValue, CTS_EMAIL_VAL_DEFAULT_BOOL, ctsBoolDefault);
1127 if(errorCode != CTS_SUCCESS)
1129 LogWarning("Fail to set favorite value to ctsValue default : " << ctsBoolDefault);
1130 contacts_svc_value_free(ctsValue);
1134 errorCode = contacts_svc_value_set_int(ctsValue, CTS_EMAIL_VAL_TYPE_INT, ctsIntType);
1135 if(errorCode != CTS_SUCCESS)
1137 LogWarning("Fail to set default value to ctsValue type : " << ctsIntType);
1138 contacts_svc_value_free(ctsValue);
1142 // if(ctsStrCustomType != NULL)
1144 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_EMAIL_VAL_LABEL_STR, ctsStrCustomType);
1145 // if(errorCode != CTS_SUCCESS)
1147 // LogWarning("Fail to set custom value to ctsValue type : " << ctsStrCustomType);
1148 // contacts_svc_value_free(ctsValue);
1153 gsList = g_slist_append(gsList, ctsValue);
1156 contacts_svc_struct_store_list(m_platformContact, CTS_CF_EMAIL_LIST, gsList);
1158 for (; gsList; gsList = g_slist_next(gsList))
1159 contacts_svc_value_free(static_cast<CTSvalue*>(gsList->data));
1160 g_slist_free(gsList);
1163 void ContactObjectA2PConverter::importGrouprelList()
1167 GSList *gsList = NULL;
1168 GSList *gsListIter = NULL;
1170 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_GROUPREL_LIST, &gsList);
1171 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
1173 ThrowMsg(PlatformException, "getting grouprel list (err:" <<
1174 errorCode << ", gsList:" << gsList << ")");
1177 gsListIter = gsList;
1178 for(; gsListIter; gsListIter = g_slist_next(gsListIter))
1180 CTSvalue* ctsValue = static_cast<CTSvalue*>(gsListIter->data);
1181 errorCode = contacts_svc_value_set_bool(ctsValue, CTS_GROUPREL_VAL_DELETE_BOOL, true);
1182 if(errorCode != CTS_SUCCESS)
1184 ThrowMsg(PlatformException, "clearing grouprel list (err:" << errorCode << ")");
1188 if(m_abstractContact->getCategoriesNum() == 0)
1191 CTSiter* ctsIterGroup = NULL;
1192 GSList *gsListGroups = NULL;
1194 int addressBookId = ContactUtility::strToInt(m_abstractContact->getAddressBookId());
1196 StringArrayPtr categories = m_abstractContact->getCategories();
1198 StringArray::iterator categoriesIter = categories->begin();
1199 for(; categoriesIter != categories->end(); categoriesIter++)
1201 string category = *categoriesIter;
1203 errorCode = contacts_svc_get_list(CTS_LIST_ALL_GROUP, &ctsIterGroup);
1204 if (errorCode == CTS_SUCCESS)
1206 while (contacts_svc_iter_next(ctsIterGroup) == CTS_SUCCESS)
1208 CTSvalue *ctsValueFoundGroup = contacts_svc_iter_get_info(ctsIterGroup);
1209 if (ctsValueFoundGroup)
1211 group_info_t* groupInfo = g_new0(group_info_t, 1);
1213 groupInfo->group_name = g_strdup(contacts_svc_value_get_str(ctsValueFoundGroup, CTS_LIST_GROUP_NAME_STR));
1214 groupInfo->addressbook_id = contacts_svc_value_get_int(ctsValueFoundGroup, CTS_GROUP_VAL_ADDRESSBOOK_ID_INT);
1215 groupInfo->group_id = contacts_svc_value_get_int(ctsValueFoundGroup, CTS_GROUP_VAL_ID_INT);
1216 gsListGroups = g_slist_append(gsListGroups, groupInfo);
1221 CTSvalue *group = contacts_svc_value_new(CTS_VALUE_GROUP_RELATION);
1224 LogWarning("Fail to create CTSvalue with contacts_svc_value_new(CTS_VALUE_GROUP_RELATION)");
1230 bool isNewGroup = true;
1231 GSList* gsListGroupsIter = gsListGroups;
1232 for(; gsListGroupsIter; gsListGroupsIter=g_slist_next(gsListGroupsIter))
1234 group_info_t* groupInfo = (group_info_t*)gsListGroupsIter->data;
1236 if ((groupInfo->group_name != NULL) &&
1237 (category == groupInfo->group_name) &&
1238 (groupInfo->addressbook_id == addressBookId))
1241 groupId = groupInfo->group_id;
1244 if (groupInfo->group_name)
1245 free(groupInfo->group_name);
1249 g_slist_free(gsListGroups);
1250 gsListGroups = NULL;
1254 CTSvalue *ctsValueNewGroup;
1255 ctsValueNewGroup = contacts_svc_value_new(CTS_VALUE_GROUP);
1257 contacts_svc_value_set_str(ctsValueNewGroup, CTS_GROUP_VAL_NAME_STR, (const char*)(category.c_str()));
1258 contacts_svc_value_set_int(ctsValueNewGroup, CTS_GROUP_VAL_ADDRESSBOOK_ID_INT, addressBookId);
1259 groupId = contacts_svc_insert_group(addressBookId, ctsValueNewGroup);
1262 ThrowMsg(PlatformException, "contacts_svc_insert_group (groupId:" << groupId << ")");
1265 contacts_svc_value_free(ctsValueNewGroup);
1270 for (; gsList; gsList = g_slist_next(gsList))
1271 contacts_svc_value_free(static_cast<CTSvalue*>(gsList->data));
1272 g_slist_free(gsList);
1274 ThrowMsg(PlatformException, "groupId is not properly set");
1277 errorCode = contacts_svc_value_set_int(group, CTS_GROUPREL_VAL_ID_INT, groupId);
1278 if (errorCode != CTS_SUCCESS)
1280 for (; gsList; gsList = g_slist_next(gsList))
1281 contacts_svc_value_free(static_cast<CTSvalue*>(gsList->data));
1282 g_slist_free(gsList);
1284 ThrowMsg(PlatformException, "Fail to set group type value to ctsValue group (err:" << errorCode << ")");
1287 gsList = g_slist_append(gsList, group);
1290 contacts_svc_struct_store_list(m_platformContact, CTS_CF_GROUPREL_LIST, gsList);
1292 for (; gsList; gsList = g_slist_next(gsList))
1293 contacts_svc_value_free(static_cast<CTSvalue*>(gsList->data));
1294 g_slist_free(gsList);
1297 void ContactObjectA2PConverter::importEventList()
1301 GSList *gsList = NULL;
1302 GSList *gsListIter = NULL;
1304 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_EVENT_LIST, &gsList);
1305 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
1307 ThrowMsg(PlatformException, "getting event list (err:" <<
1308 errorCode << ", gsList:" << gsList << ")");
1311 gsListIter = gsList;
1312 for(; gsListIter; gsListIter = g_slist_next(gsListIter))
1314 CTSvalue* ctsValue = static_cast<CTSvalue*>(gsListIter->data);
1315 errorCode = contacts_svc_value_set_bool(ctsValue, CTS_EVENT_VAL_DELETE_BOOL, true);
1316 if(errorCode != CTS_SUCCESS)
1318 ThrowMsg(PlatformException, "clearing event list (err:" << errorCode << ")");
1322 if(!m_abstractContact->getBirthdayIsSet() && m_abstractContact->getAnniversariesNum() == 0)
1325 gsList = importEventListBirthday(gsList);
1327 gsList = importEventListAnniversary(gsList);
1329 contacts_svc_struct_store_list(m_platformContact, CTS_CF_EVENT_LIST, gsList);
1331 for (; gsList; gsList = g_slist_next(gsList))
1332 contacts_svc_value_free(static_cast<CTSvalue*>(gsList->data));
1333 g_slist_free(gsList);
1336 GSList * ContactObjectA2PConverter::importEventListBirthday(GSList *gsList)
1340 if(!m_abstractContact->getBirthdayIsSet())
1343 tm birthdayTm = m_abstractContact->getBirthday();
1345 if (birthdayTm.tm_year == 0 && birthdayTm.tm_mon == 0 && birthdayTm.tm_mday == 0)
1348 int birthday = ( ( birthdayTm.tm_year + 1900) * 10000 ) +
1349 ( ( birthdayTm.tm_mon + 1 ) * 100 ) +
1352 CTSvalue *ctsValue = NULL;
1353 ctsValue = contacts_svc_value_new(CTS_VALUE_EVENT);
1354 if(ctsValue == NULL)
1356 LogWarning("Fail to create CTSvalue with contacts_svc_value_new(CTS_VALUE_EVENT)");
1360 errorCode = contacts_svc_value_set_int(ctsValue, CTS_EVENT_VAL_TYPE_INT, CTS_EVENT_TYPE_BIRTH);
1361 if(errorCode != CTS_SUCCESS)
1363 LogWarning("Fail to set event type value to ctsValue value : birthday");
1364 contacts_svc_value_free(ctsValue);
1368 errorCode = contacts_svc_value_set_int(ctsValue, CTS_EVENT_VAL_DATE_INT, birthday);
1369 if(errorCode != CTS_SUCCESS)
1371 LogWarning("Fail to set birthday value to ctsValue type : " << birthday);
1372 contacts_svc_value_free(ctsValue);
1376 gsList = g_slist_append(gsList, ctsValue);
1381 GSList * ContactObjectA2PConverter::importEventListAnniversary(GSList *gsList)
1385 if(m_abstractContact->getAnniversariesNum() == 0)
1388 ContactAnniversaryArrayPtr anniversaries = m_abstractContact->getAnniversaries();
1390 ContactAnniversaryArray::iterator anniversariesIter = anniversaries->begin();
1391 for(; anniversariesIter != anniversaries->end(); anniversariesIter++)
1393 ContactAnniversaryPtr anniversary = *anniversariesIter;
1395 if(!anniversary->getDateIsSet())
1398 tm dateTm = anniversary->getDate();
1400 if (dateTm.tm_year == 0 && dateTm.tm_mon == 0 && dateTm.tm_mday == 0)
1403 int date = ( ( dateTm.tm_year + 1900) * 10000 ) +
1404 ( ( dateTm.tm_mon + 1 ) * 100 ) +
1407 CTSvalue *ctsValue = NULL;
1408 ctsValue = contacts_svc_value_new(CTS_VALUE_EVENT);
1409 if(ctsValue == NULL)
1411 LogWarning("Fail to create CTSvalue with contacts_svc_value_new(CTS_VALUE_EVENT)");
1415 errorCode = contacts_svc_value_set_int(ctsValue, CTS_EVENT_VAL_TYPE_INT, CTS_EVENT_TYPE_ANNIVERSARY);
1416 if(errorCode != CTS_SUCCESS)
1418 LogWarning("Fail to set event type value to ctsValue value : birthday");
1419 contacts_svc_value_free(ctsValue);
1423 errorCode = contacts_svc_value_set_int(ctsValue, CTS_EVENT_VAL_DATE_INT, date);
1424 if(errorCode != CTS_SUCCESS)
1426 LogWarning("Fail to set date value to ctsValue type : " << date);
1427 contacts_svc_value_free(ctsValue);
1431 // if(anniversary->getLabelIsSet())
1433 // string label = anniversary->getLabel();
1434 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_EVENT_VAL_LABEL_STR, label.c_str());
1435 // if(errorCode != CTS_SUCCESS)
1437 // LogWarning("Fail to set label value to ctsValue type : " << label);
1438 // contacts_svc_value_free(ctsValue);
1444 gsList = g_slist_append(gsList, ctsValue);
1450 void ContactObjectA2PConverter::importPostalList()
1454 GSList *gsList = NULL;
1455 GSList *gsListIter = NULL;
1457 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_POSTAL_ADDR_LIST, &gsList);
1458 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
1460 ThrowMsg(PlatformException, "getting postal list (err:" <<
1461 errorCode << ", gsList:" << gsList << ")");
1464 gsListIter = gsList;
1465 for(; gsListIter; gsListIter = g_slist_next(gsListIter))
1467 CTSvalue* ctsValue = static_cast<CTSvalue*>(gsListIter->data);
1468 errorCode = contacts_svc_value_set_bool(ctsValue, CTS_POSTAL_VAL_DELETE_BOOL, true);
1469 if(errorCode != CTS_SUCCESS)
1471 ThrowMsg(PlatformException, "clearing postal list (err:" << errorCode << ")");
1475 if(m_abstractContact->getAddressesNum() == 0)
1478 ContactAddressArrayPtr addresses = m_abstractContact->getAddresses();
1480 ContactAddressArray::iterator addressesIter = addresses->begin();
1481 for(; addressesIter != addresses->end(); addressesIter++)
1483 ContactAddressPtr address = *addressesIter;
1484 ContactAddressTypeArrayPtr types = address->getTypes();
1486 if(( !address->getCountryIsSet() || address->getCountry().empty() ) &&
1487 ( !address->getRegionIsSet() || address->getRegion().empty() ) &&
1488 ( !address->getCityIsSet() || address->getCity().empty() ) &&
1489 ( !address->getStreetAddressIsSet() || address->getStreetAddress().empty() ) &&
1490 ( !address->getAdditionalInformationIsSet() || address->getAdditionalInformation().empty() ) &&
1491 ( !address->getPostalCodeIsSet() || address->getPostalCode().empty() ) )
1493 LogDebug("No information for address was not set.");
1498 bool ctsBoolDefault = false;
1499 char *ctsStrCustomType = NULL;
1501 ContactAddressTypeArray::iterator typesIter = types->begin();
1502 for(; typesIter != types->end(); typesIter++)
1504 ContactAddressType type = *typesIter;
1505 if(type == CONTACT_ADDRESS_TYPE_HOME)
1506 ctsIntType = ctsIntType | CTS_ADDR_TYPE_HOME;
1507 else if(type == CONTACT_ADDRESS_TYPE_WORK)
1508 ctsIntType = ctsIntType | CTS_ADDR_TYPE_WORK;
1509 else if(type == CONTACT_ADDRESS_TYPE_PREF)
1510 ctsBoolDefault = true;
1513 // TODO Will be added after type changed to string
1514 // ctsIntType = ctsIntType | CTS_POSTAL_TYPE_CUSTOM;
1515 // ctsStrCustomType = ...;
1519 CTSvalue *ctsValue = contacts_svc_value_new(CTS_VALUE_POSTAL);
1520 if(ctsValue == NULL)
1522 LogWarning("Fail to create CTSvalue with contacts_svc_value_new(CTS_VALUE_POSTAL)");
1526 if(address->getCountryIsSet())
1528 string country = address->getCountry();
1529 errorCode = contacts_svc_value_set_str(ctsValue, CTS_POSTAL_VAL_COUNTRY_STR, country.c_str());
1530 if(errorCode != CTS_SUCCESS)
1532 LogWarning("Fail to set country value to ctsValue str : " << country);
1533 contacts_svc_value_free(ctsValue);
1538 if(address->getRegionIsSet())
1540 string region = address->getRegion();
1541 errorCode = contacts_svc_value_set_str(ctsValue, CTS_POSTAL_VAL_REGION_STR, region.c_str());
1542 if(errorCode != CTS_SUCCESS)
1544 LogWarning("Fail to set region value to ctsValue str : " << region);
1545 contacts_svc_value_free(ctsValue);
1550 if(address->getCityIsSet())
1552 string city = address->getCity();
1553 errorCode = contacts_svc_value_set_str(ctsValue, CTS_POSTAL_VAL_LOCALITY_STR, city.c_str());
1554 if(errorCode != CTS_SUCCESS)
1556 LogWarning("Fail to set city value to ctsValue str : " << city);
1557 contacts_svc_value_free(ctsValue);
1562 if(address->getStreetAddressIsSet())
1564 string streetAddress = address->getStreetAddress();
1565 errorCode = contacts_svc_value_set_str(ctsValue, CTS_POSTAL_VAL_STREET_STR, streetAddress.c_str());
1566 if(errorCode != CTS_SUCCESS)
1568 LogWarning("Fail to set street value to ctsValue str : " << streetAddress);
1569 contacts_svc_value_free(ctsValue);
1574 if(address->getAdditionalInformationIsSet())
1576 string additionalInformation = address->getAdditionalInformation();
1577 errorCode = contacts_svc_value_set_str(ctsValue, CTS_POSTAL_VAL_EXTENDED_STR, additionalInformation.c_str());
1578 if(errorCode != CTS_SUCCESS)
1580 LogWarning("Fail to set extended value to ctsValue str : " << additionalInformation);
1581 contacts_svc_value_free(ctsValue);
1586 if(address->getPostalCodeIsSet())
1588 string postalCode = address->getPostalCode();
1589 errorCode = contacts_svc_value_set_str(ctsValue, CTS_POSTAL_VAL_POSTALCODE_STR, postalCode.c_str());
1590 if(errorCode != CTS_SUCCESS)
1592 LogWarning("Fail to set postalcode value to ctsValue str : " << postalCode);
1593 contacts_svc_value_free(ctsValue);
1598 errorCode = contacts_svc_value_set_bool(ctsValue, CTS_POSTAL_VAL_DEFAULT_BOOL, ctsBoolDefault);
1599 if(errorCode != CTS_SUCCESS)
1601 LogWarning("Fail to set favorite value to ctsValue default : " << ctsBoolDefault);
1602 contacts_svc_value_free(ctsValue);
1606 errorCode = contacts_svc_value_set_int(ctsValue, CTS_POSTAL_VAL_TYPE_INT, ctsIntType);
1607 if(errorCode != CTS_SUCCESS)
1609 LogWarning("Fail to set default value to ctsValue type : " << ctsIntType);
1610 contacts_svc_value_free(ctsValue);
1614 // if(ctsStrCustomType != NULL)
1616 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_POSTAL_VAL_LABEL_STR, ctsStrCustomType);
1617 // if(errorCode != CTS_SUCCESS)
1619 // LogWarning("Fail to set custom value to ctsValue type : " << ctsStrCustomType);
1620 // contacts_svc_value_free(ctsValue);
1625 gsList = g_slist_append(gsList, ctsValue);
1628 contacts_svc_struct_store_list(m_platformContact, CTS_CF_POSTAL_ADDR_LIST, gsList);
1630 for (; gsList; gsList = g_slist_next(gsList))
1631 contacts_svc_value_free(static_cast<CTSvalue*>(gsList->data));
1632 g_slist_free(gsList);
1635 void ContactObjectA2PConverter::importWebAddrList()
1639 GSList *gsList = NULL;
1640 GSList *gsListIter = NULL;
1642 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_WEB_ADDR_LIST, &gsList);
1643 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
1645 ThrowMsg(PlatformException, "getting web addr list (err:" <<
1646 errorCode << ", gsList:" << gsList << ")");
1649 gsListIter = gsList;
1650 for(; gsListIter; gsListIter = g_slist_next(gsListIter))
1652 CTSvalue* ctsValue = static_cast<CTSvalue*>(gsListIter->data);
1653 errorCode = contacts_svc_value_set_bool(ctsValue, CTS_WEB_VAL_DELETE_BOOL, true);
1654 if(errorCode != CTS_SUCCESS)
1656 ThrowMsg(PlatformException, "clearing web addr list (err:" << errorCode << ")");
1660 ContactWebSiteArrayPtr webSites = m_abstractContact->getUrls();
1661 if(webSites->size() == 0)
1664 ContactWebSiteArray::iterator webSiteIter = webSites->begin();
1665 for(; webSiteIter != webSites->end(); webSiteIter++)
1667 ContactWebSitePtr webSite = *webSiteIter;
1668 ContactWebSiteType type = webSite->getType();
1670 if(!webSite->getUrlIsSet() || webSite->getUrl().empty())
1672 LogDebug("url was not set.");
1676 string url = webSite->getUrl();
1679 char *ctsStrCustomType = NULL;
1681 if(type == WEBSITE_TYPE_HOMEPAGE)
1682 ctsIntType = CTS_WEB_TYPE_HOME;
1683 else if(type == WEBSITE_TYPE_BLOG)
1684 ctsIntType = CTS_WEB_TYPE_WORK;
1687 // TODO Will be added after type changed to string
1688 // ctsIntType = CTS_WEB_TYPE_CUSTOM;
1689 // ctsStrCustomType = ...;
1692 CTSvalue *ctsValue = contacts_svc_value_new(CTS_VALUE_WEB);
1693 if(ctsValue == NULL)
1695 LogWarning("Fail to create CTSvalue with contacts_svc_value_new(CTS_VALUE_WEB)");
1699 errorCode = contacts_svc_value_set_str(ctsValue, CTS_WEB_VAL_ADDR_STR, url.c_str());
1700 if(errorCode != CTS_SUCCESS)
1702 LogWarning("Fail to set url value to ctsValue str : " << url);
1703 contacts_svc_value_free(ctsValue);
1707 errorCode = contacts_svc_value_set_int(ctsValue, CTS_WEB_VAL_TYPE_INT, ctsIntType);
1708 if(errorCode != CTS_SUCCESS)
1710 LogWarning("Fail to set default value to ctsValue type : " << ctsIntType);
1711 contacts_svc_value_free(ctsValue);
1715 // if(ctsStrCustomType != NULL)
1717 // errorCode = contacts_svc_value_set_str(ctsValue, CTS_WEB_VAL_LABEL_STR, ctsStrCustomType);
1718 // if(errorCode != CTS_SUCCESS)
1720 // LogWarning("Fail to set custom value to ctsValue type : " << ctsStrCustomType);
1721 // contacts_svc_value_free(ctsValue);
1726 gsList = g_slist_append(gsList, ctsValue);
1729 contacts_svc_struct_store_list(m_platformContact, CTS_CF_WEB_ADDR_LIST, gsList);
1731 for (; gsList; gsList = g_slist_next(gsList))
1732 contacts_svc_value_free(static_cast<CTSvalue*>(gsList->data));
1733 g_slist_free(gsList);
1736 void ContactObjectA2PConverter::importNicknameList()
1740 GSList *gsList = NULL;
1741 GSList *gsListIter = NULL;
1743 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_NICKNAME_LIST, &gsList);
1744 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
1746 ThrowMsg(PlatformException, "getting nickname list (err:" <<
1747 errorCode << ", gsList:" << gsList << ")");
1750 gsListIter = gsList;
1751 for(; gsListIter; gsListIter = g_slist_next(gsListIter))
1753 CTSvalue* ctsValue = static_cast<CTSvalue*>(gsListIter->data);
1754 errorCode = contacts_svc_value_set_bool(ctsValue, CTS_NICKNAME_VAL_DELETE_BOOL, true);
1755 if(errorCode != CTS_SUCCESS)
1757 ThrowMsg(PlatformException, "clearing nickname list (err:" << errorCode << ")");
1761 ContactNamePtr contactName = m_abstractContact->getName();
1762 if(contactName == NULL)
1765 if(contactName->getNicknamesNum() == 0)
1768 StringArrayPtr nicknames = contactName->getNicknames();
1770 StringArray::iterator nicknamesIter = nicknames->begin();
1771 for(; nicknamesIter != nicknames->end(); nicknamesIter++)
1773 string nickname = *nicknamesIter;
1775 if(nickname.empty())
1777 LogDebug("nickname was not set.");
1781 CTSvalue *ctsValue = contacts_svc_value_new(CTS_VALUE_NICKNAME);
1782 if(ctsValue == NULL)
1784 LogWarning("Fail to create CTSvalue with contacts_svc_value_new(CTS_VALUE_NICKNAME)");
1788 errorCode = contacts_svc_value_set_str(ctsValue, CTS_NICKNAME_VAL_NAME_STR, nickname.c_str());
1789 if(errorCode != CTS_SUCCESS)
1791 LogWarning("Fail to set nickname value to ctsValue str : " << nickname);
1792 contacts_svc_value_free(ctsValue);
1796 gsList = g_slist_append(gsList, ctsValue);
1799 contacts_svc_struct_store_list(m_platformContact, CTS_CF_NICKNAME_LIST, gsList);
1801 for (; gsList; gsList = g_slist_next(gsList))
1802 contacts_svc_value_free(static_cast<CTSvalue*>(gsList->data));
1803 g_slist_free(gsList);