1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_connectivity.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include "MacabGroup.hxx" 32*cdf0e10cSrcweir #include "MacabRecords.hxx" 33*cdf0e10cSrcweir #include "macabutilities.hxx" 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir using namespace connectivity::macab; 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir // ------------------------------------------------------------------------- 38*cdf0e10cSrcweir /* A MacabGroup is basically a MacabRecords with a different constructor. 39*cdf0e10cSrcweir * It only exists as a different entity for clarification purposes (a group 40*cdf0e10cSrcweir * is its own entity in the Mac OS X Address Book) and because its 41*cdf0e10cSrcweir * construction is so unique (it is based on an already existent 42*cdf0e10cSrcweir * MacabRecords of the entire address book). 43*cdf0e10cSrcweir */ 44*cdf0e10cSrcweir MacabGroup::MacabGroup(const ABAddressBookRef _addressBook, const MacabRecords *_allRecords, const ABGroupRef _xGroup) 45*cdf0e10cSrcweir : MacabRecords(_addressBook) 46*cdf0e10cSrcweir { 47*cdf0e10cSrcweir sal_Int32 i, j, nAllRecordsSize; 48*cdf0e10cSrcweir CFArrayRef xGroupMembers = ABGroupCopyArrayOfAllMembers(_xGroup); 49*cdf0e10cSrcweir ABPersonRef xPerson; 50*cdf0e10cSrcweir CFStringRef sGroupMemberUID; 51*cdf0e10cSrcweir sal_Bool bFound; 52*cdf0e10cSrcweir macabfield *xRecordField; 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir // Set the group's name (stored in MacabRecords as m_sName) 55*cdf0e10cSrcweir CFStringRef sGroupName; 56*cdf0e10cSrcweir sGroupName = (CFStringRef) ABRecordCopyValue(_xGroup, kABGroupNameProperty); 57*cdf0e10cSrcweir m_sName = CFStringToOUString(sGroupName); 58*cdf0e10cSrcweir CFRelease(sGroupName); 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir // The _group's_ records (remember MacabGroup inherits from MacabRecords) 61*cdf0e10cSrcweir recordsSize = (sal_Int32) CFArrayGetCount(xGroupMembers); 62*cdf0e10cSrcweir records = new MacabRecord *[recordsSize]; 63*cdf0e10cSrcweir setHeader(_allRecords->getHeader()); 64*cdf0e10cSrcweir 65*cdf0e10cSrcweir /* Go through each record in the group and try to find that record's UID 66*cdf0e10cSrcweir * in the MacabRecords that was passed in. If it is found, add that 67*cdf0e10cSrcweir * record to the group. Otherwise, report an error. (All records should 68*cdf0e10cSrcweir * exist in the MacabRecords that was passed in.) 69*cdf0e10cSrcweir */ 70*cdf0e10cSrcweir nAllRecordsSize = _allRecords->size(); 71*cdf0e10cSrcweir for(i = 0; i < recordsSize; i++) 72*cdf0e10cSrcweir { 73*cdf0e10cSrcweir xPerson = (ABPersonRef) CFArrayGetValueAtIndex(xGroupMembers,i); 74*cdf0e10cSrcweir if(xPerson != NULL) 75*cdf0e10cSrcweir { 76*cdf0e10cSrcweir sGroupMemberUID = (CFStringRef) ABRecordCopyValue(xPerson, kABUIDProperty); 77*cdf0e10cSrcweir if(sGroupMemberUID != NULL) 78*cdf0e10cSrcweir { 79*cdf0e10cSrcweir bFound = sal_False; 80*cdf0e10cSrcweir for(j = 0; j < nAllRecordsSize; j++) 81*cdf0e10cSrcweir { 82*cdf0e10cSrcweir xRecordField = _allRecords->getField(j,CFStringToOUString(kABUIDProperty)); 83*cdf0e10cSrcweir if(xRecordField != NULL && xRecordField->value != NULL) 84*cdf0e10cSrcweir { 85*cdf0e10cSrcweir if(CFEqual(xRecordField->value, sGroupMemberUID)) 86*cdf0e10cSrcweir { 87*cdf0e10cSrcweir /* Found the matching UID! Insert into the group... */ 88*cdf0e10cSrcweir insertRecord(_allRecords->getRecord(j)); 89*cdf0e10cSrcweir bFound = sal_True; 90*cdf0e10cSrcweir break; 91*cdf0e10cSrcweir } 92*cdf0e10cSrcweir } 93*cdf0e10cSrcweir } 94*cdf0e10cSrcweir OSL_ENSURE(bFound, "MacabGroup::MacabGroup : Could not find group member based on UID!\n"); 95*cdf0e10cSrcweir CFRelease(sGroupMemberUID); 96*cdf0e10cSrcweir } 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir } 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir CFRelease(xGroupMembers); 101*cdf0e10cSrcweir } 102*cdf0e10cSrcweir 103