/core/externals/update-engine/externals/gdata-objectivec-client/Source/Clients/Contacts/GDataEntryContactBase.m

http://macfuse.googlecode.com/ · Objective C · 957 lines · 638 code · 279 blank · 40 comment · 46 complexity · 004a58af84c61a68486bea7043ec0fdb MD5 · raw file

  1. /* Copyright (c) 2008 Google Inc.
  2. *
  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. // GDataEntryContact.m
  17. //
  18. #if !GDATA_REQUIRE_SERVICE_INCLUDES || GDATA_INCLUDE_CONTACTS_SERVICE
  19. #import "GDataEntryContactBase.h"
  20. #import "GDataContactConstants.h"
  21. @implementation GDataEntryContactBase
  22. + (NSString *)coreProtocolVersionForServiceVersion:(NSString *)serviceVersion {
  23. return [GDataContactConstants coreProtocolVersionForServiceVersion:serviceVersion];
  24. }
  25. - (void)addExtensionDeclarations {
  26. [super addExtensionDeclarations];
  27. Class entryClass = [self class];
  28. // ContactEntry extensions
  29. [self addExtensionDeclarationForParentClass:entryClass
  30. childClasses:
  31. [GDataOrganization class],
  32. [GDataEmail class],
  33. [GDataIM class],
  34. [GDataPhoneNumber class],
  35. [GDataPostalAddress class],
  36. [GDataExtendedProperty class],
  37. // version 3 extensions
  38. [GDataContactBillingInformation class],
  39. [GDataContactBirthday class],
  40. [GDataContactCalendarLink class],
  41. [GDataContactDirectoryServer class],
  42. [GDataContactEvent class],
  43. [GDataContactExternalID class],
  44. [GDataContactGender class],
  45. [GDataContactHobby class],
  46. [GDataContactInitials class],
  47. [GDataContactJot class],
  48. [GDataContactLanguage class],
  49. [GDataWhere class],
  50. [GDataContactMaidenName class],
  51. [GDataContactMileage class],
  52. [GDataName class],
  53. [GDataContactNickname class],
  54. [GDataContactOccupation class],
  55. [GDataContactPriority class],
  56. [GDataContactRelation class],
  57. [GDataContactSensitivity class],
  58. [GDataContactShortName class],
  59. [GDataStructuredPostalAddress class],
  60. [GDataContactSubject class],
  61. [GDataContactUserDefinedField class],
  62. [GDataContactWebsiteLink class],
  63. nil];
  64. }
  65. #if !GDATA_SIMPLE_DESCRIPTIONS
  66. - (NSMutableArray *)itemsForDescription {
  67. static struct GDataDescriptionRecord descRecs[] = {
  68. { @"org", @"organizations", kGDataDescArrayDescs },
  69. { @"email", @"emailAddresses", kGDataDescArrayDescs },
  70. { @"phone", @"phoneNumbers", kGDataDescArrayDescs },
  71. { @"IM", @"IMAddresses", kGDataDescArrayDescs },
  72. { @"extProps", @"extendedProperties", kGDataDescArrayDescs },
  73. { @"version<=2:postal", @"postalAddresses", kGDataDescArrayDescs },
  74. { nil, nil, (GDataDescRecTypes)0 }
  75. };
  76. NSMutableArray *items = [super itemsForDescription];
  77. [self addDescriptionRecords:descRecs toItems:items];
  78. // description info for methods that assert prior to V3
  79. if ([self isServiceVersionAtLeast:kGDataContactServiceV3]) {
  80. static struct GDataDescriptionRecord descRecsV3[] = {
  81. // v3 extensions
  82. { @"name", @"name", kGDataDescValueLabeled },
  83. { @"structPostal", @"structuredPostalAddresses", kGDataDescArrayDescs },
  84. { @"billing", @"billingInformation", kGDataDescValueLabeled },
  85. { @"birthday", @"birthday", kGDataDescValueLabeled },
  86. { @"calendar", @"calendarLinks", kGDataDescArrayDescs },
  87. { @"dirServer", @"directoryServer", kGDataDescValueLabeled },
  88. { @"event", @"events", kGDataDescArrayDescs },
  89. { @"extID", @"externalIDs", kGDataDescArrayDescs },
  90. { @"gender", @"gender", kGDataDescValueLabeled },
  91. { @"hobby", @"hobbies", kGDataDescArrayDescs },
  92. { @"initials", @"initials", kGDataDescValueLabeled },
  93. { @"jot", @"jots", kGDataDescArrayDescs },
  94. { @"lang", @"languages", kGDataDescArrayDescs },
  95. { @"where", @"where", kGDataDescValueLabeled },
  96. { @"maidenName", @"maidenName", kGDataDescValueLabeled },
  97. { @"mileage", @"mileage", kGDataDescValueLabeled },
  98. { @"nickname", @"nickname", kGDataDescValueLabeled },
  99. { @"occupation", @"occupation", kGDataDescValueLabeled },
  100. { @"priority", @"priority", kGDataDescValueLabeled },
  101. { @"relation", @"relations", kGDataDescArrayDescs },
  102. { @"sensitivity", @"sensitivity", kGDataDescValueLabeled },
  103. { @"shortName", @"shortName", kGDataDescValueLabeled },
  104. { @"subject", @"subject", kGDataDescValueLabeled },
  105. { @"userDefd", @"userDefinedFields", kGDataDescArrayDescs },
  106. { @"website", @"websiteLinks", kGDataDescArrayDescs },
  107. { nil, nil, (GDataDescRecTypes)0 }
  108. };
  109. [self addDescriptionRecords:descRecsV3 toItems:items];
  110. }
  111. return items;
  112. }
  113. #endif
  114. #pragma mark -
  115. // The Focus UI does not happily handle empty strings, so we'll force those
  116. // to be nil
  117. - (void)setTitle:(GDataTextConstruct *)theTitle {
  118. // title is read-only beginning in service version 3
  119. GDATA_DEBUG_ASSERT_MAX_SERVICE_VERSION(kGDataContactServiceV2);
  120. if ([[theTitle stringValue] length] == 0) {
  121. theTitle = nil;
  122. }
  123. [super setTitle:theTitle];
  124. }
  125. - (void)setTitleWithString:(NSString *)str {
  126. GDATA_DEBUG_ASSERT_MAX_SERVICE_VERSION(kGDataContactServiceV2);
  127. if ([str length] == 0) {
  128. [self setTitle:nil];
  129. } else {
  130. [super setTitleWithString:str];
  131. }
  132. }
  133. #pragma mark -
  134. // routines to do the work for finding or setting the primary elements
  135. // of the different extension classes
  136. - (GDataObject *)primaryObjectForExtensionClass:(Class)theClass {
  137. NSArray *extns = [self objectsForExtensionClass:theClass];
  138. for (GDataObject *obj in extns) {
  139. if ([(id)obj isPrimary]) return obj;
  140. }
  141. return nil;
  142. }
  143. - (void)setPrimaryObject:(GDataObject *)newPrimaryObj
  144. forExtensionClass:(Class)theClass {
  145. NSArray *extns = [self objectsForExtensionClass:theClass];
  146. BOOL foundIt = NO;
  147. for (GDataObject *obj in extns) {
  148. BOOL isPrimary = [newPrimaryObj isEqual:obj];
  149. [(id)obj setIsPrimary:isPrimary];
  150. if (isPrimary) foundIt = YES;
  151. }
  152. // if the object isn't already in the list, add it
  153. if (!foundIt && newPrimaryObj != nil) {
  154. [(id)newPrimaryObj setIsPrimary:YES];
  155. [self addObject:newPrimaryObj forExtensionClass:theClass];
  156. }
  157. }
  158. #pragma mark -
  159. - (NSArray *)organizations {
  160. return [self objectsForExtensionClass:[GDataOrganization class]];
  161. }
  162. - (void)setOrganizations:(NSArray *)array {
  163. [self setObjects:array forExtensionClass:[GDataOrganization class]];
  164. }
  165. - (void)addOrganization:(GDataOrganization *)obj {
  166. [self addObject:obj forExtensionClass:[GDataOrganization class]];
  167. }
  168. - (void)removeOrganization:(GDataOrganization *)obj {
  169. [self removeObject:obj forExtensionClass:[GDataOrganization class]];
  170. }
  171. - (GDataOrganization *)primaryOrganization {
  172. id obj = [self primaryObjectForExtensionClass:[GDataOrganization class]];
  173. return obj;
  174. }
  175. - (void)setPrimaryOrganization:(GDataOrganization *)obj {
  176. [self setPrimaryObject:obj forExtensionClass:[GDataOrganization class]];
  177. }
  178. - (NSArray *)emailAddresses {
  179. return [self objectsForExtensionClass:[GDataEmail class]];
  180. }
  181. - (void)setEmailAddresses:(NSArray *)array {
  182. [self setObjects:array forExtensionClass:[GDataEmail class]];
  183. }
  184. - (void)addEmailAddress:(GDataEmail *)obj {
  185. [self addObject:obj forExtensionClass:[GDataEmail class]];
  186. }
  187. - (void)removeEmailAddress:(GDataEmail *)obj {
  188. [self removeObject:obj forExtensionClass:[GDataEmail class]];
  189. }
  190. - (GDataEmail *)primaryEmailAddress {
  191. id obj = [self primaryObjectForExtensionClass:[GDataEmail class]];
  192. return obj;
  193. }
  194. - (void)setPrimaryEmailAddress:(GDataEmail *)obj {
  195. [self setPrimaryObject:obj forExtensionClass:[GDataEmail class]];
  196. }
  197. - (NSArray *)IMAddresses {
  198. return [self objectsForExtensionClass:[GDataIM class]];
  199. }
  200. - (void)setIMAddresses:(NSArray *)array {
  201. [self setObjects:array forExtensionClass:[GDataIM class]];
  202. }
  203. - (GDataIM *)primaryIMAddress {
  204. id obj = [self primaryObjectForExtensionClass:[GDataIM class]];
  205. return obj;
  206. }
  207. - (void)setPrimaryIMAddress:(GDataIM *)obj {
  208. [self setPrimaryObject:obj forExtensionClass:[GDataIM class]];
  209. }
  210. - (void)addIMAddress:(GDataIM *)obj {
  211. [self addObject:obj forExtensionClass:[GDataIM class]];
  212. }
  213. - (void)removeIMAddress:(GDataIM *)obj {
  214. [self removeObject:obj forExtensionClass:[GDataIM class]];
  215. }
  216. - (NSArray *)phoneNumbers {
  217. return [self objectsForExtensionClass:[GDataPhoneNumber class]];
  218. }
  219. - (void)setPhoneNumbers:(NSArray *)array {
  220. [self setObjects:array forExtensionClass:[GDataPhoneNumber class]];
  221. }
  222. - (void)addPhoneNumber:(GDataPhoneNumber *)obj {
  223. [self addObject:obj forExtensionClass:[GDataPhoneNumber class]];
  224. }
  225. - (void)removePhoneNumber:(GDataPhoneNumber *)obj {
  226. [self removeObject:obj forExtensionClass:[GDataPhoneNumber class]];
  227. }
  228. - (GDataPhoneNumber *)primaryPhoneNumber {
  229. id obj = [self primaryObjectForExtensionClass:[GDataPhoneNumber class]];
  230. return obj;
  231. }
  232. - (void)setPrimaryPhoneNumber:(GDataPhoneNumber *)obj {
  233. [self setPrimaryObject:obj forExtensionClass:[GDataPhoneNumber class]];
  234. }
  235. - (NSArray *)postalAddresses {
  236. GDATA_DEBUG_ASSERT_MAX_SERVICE_VERSION(kGDataContactServiceV2);
  237. return [self objectsForExtensionClass:[GDataPostalAddress class]];
  238. }
  239. - (void)setPostalAddresses:(NSArray *)array {
  240. GDATA_DEBUG_ASSERT_MAX_SERVICE_VERSION(kGDataContactServiceV2);
  241. [self setObjects:array forExtensionClass:[GDataPostalAddress class]];
  242. }
  243. - (void)addPostalAddress:(GDataPostalAddress *)obj {
  244. GDATA_DEBUG_ASSERT_MAX_SERVICE_VERSION(kGDataContactServiceV2);
  245. [self addObject:obj forExtensionClass:[GDataPostalAddress class]];
  246. }
  247. - (void)removePostalAddress:(GDataPostalAddress *)obj {
  248. GDATA_DEBUG_ASSERT_MAX_SERVICE_VERSION(kGDataContactServiceV2);
  249. [self removeObject:obj forExtensionClass:[GDataPostalAddress class]];
  250. }
  251. - (GDataPostalAddress *)primaryPostalAddress {
  252. GDATA_DEBUG_ASSERT_MAX_SERVICE_VERSION(kGDataContactServiceV2);
  253. id obj = [self primaryObjectForExtensionClass:[GDataPostalAddress class]];
  254. return obj;
  255. }
  256. - (void)setPrimaryPostalAddress:(GDataPostalAddress *)obj {
  257. GDATA_DEBUG_ASSERT_MAX_SERVICE_VERSION(kGDataContactServiceV2);
  258. [self setPrimaryObject:obj forExtensionClass:[GDataPostalAddress class]];
  259. }
  260. - (NSArray *)extendedProperties {
  261. return [self objectsForExtensionClass:[GDataExtendedProperty class]];
  262. }
  263. - (void)setExtendedProperties:(NSArray *)arr {
  264. [self setObjects:arr forExtensionClass:[GDataExtendedProperty class]];
  265. }
  266. - (void)addExtendedProperty:(GDataExtendedProperty *)obj {
  267. [self addObject:obj forExtensionClass:[GDataExtendedProperty class]];
  268. }
  269. - (void)removeExtendedProperty:(GDataExtendedProperty *)obj {
  270. [self removeObject:obj forExtensionClass:[GDataExtendedProperty class]];
  271. }
  272. - (GDataExtendedProperty *)extendedPropertyForName:(NSString *)str {
  273. GDataExtendedProperty *extProp = nil;
  274. NSArray *array = [self extendedProperties];
  275. if (array != nil) {
  276. extProp = [GDataUtilities firstObjectFromArray:array
  277. withValue:str
  278. forKeyPath:@"name"];
  279. }
  280. return extProp;
  281. }
  282. // version 3 elements
  283. - (NSString *)billingInformation {
  284. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  285. GDataContactBillingInformation *obj;
  286. obj = [self objectForExtensionClass:[GDataContactBillingInformation class]];
  287. return [obj stringValue];
  288. }
  289. - (void)setBillingInformation:(NSString *)str {
  290. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  291. if ([str length] == 0) str = nil;
  292. GDataContactBillingInformation *obj;
  293. obj = [GDataContactBillingInformation valueWithString:str];
  294. [self setObject:obj forExtensionClass:[GDataContactBillingInformation class]];
  295. }
  296. - (NSString *)birthday {
  297. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  298. GDataContactBirthday *obj;
  299. obj = [self objectForExtensionClass:[GDataContactBirthday class]];
  300. return [obj stringValue];
  301. }
  302. - (void)setBirthday:(NSString *)str {
  303. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  304. if ([str length] == 0) str = nil;
  305. GDataContactBirthday *obj;
  306. obj = [GDataContactBirthday valueWithString:str];
  307. [self setObject:obj forExtensionClass:[GDataContactBirthday class]];
  308. }
  309. // Google Contacts allows birthdates with undefined years, like "--12-25"
  310. //
  311. // http://code.google.com/apis/contacts/docs/3.0/reference.html#gcBirthday
  312. //
  313. // We'll use 1804 for the year, making an obvious "unset" value to display
  314. // in Apple's UI
  315. - (NSDate *)birthdayDate {
  316. // get the birthday string, like 1970-12-25 or --12-25
  317. NSString *str = [self birthday];
  318. // convert a leading "-" year to 1804, since that's a clearly invalid
  319. // year that allows February 29
  320. if ([str hasPrefix:@"--"] && [str length] > 2) {
  321. NSString *monthDayString = [str substringFromIndex:2];
  322. str = [NSString stringWithFormat:@"1804-%@", monthDayString];
  323. }
  324. // add a time string to make it noon UTC, avoiding the chance that
  325. // a different time zone rendering would change the date
  326. str = [str stringByAppendingString:@" 12:00:00 -0000"];
  327. static NSDateFormatter *formatter = nil;
  328. if (formatter == nil) {
  329. formatter = [[NSDateFormatter alloc] init];
  330. [formatter setFormatterBehavior:NSDateFormatterBehavior10_4];
  331. [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZ"];
  332. }
  333. NSDate *date = [formatter dateFromString:str];
  334. return date;
  335. }
  336. - (void)setBirthdayWithDate:(NSDate *)date {
  337. static NSDateFormatter *formatter = nil;
  338. if (formatter == nil) {
  339. formatter = [[NSDateFormatter alloc] init];
  340. [formatter setFormatterBehavior:NSDateFormatterBehavior10_4];
  341. [formatter setDateFormat:@"yyyy-MM-dd"];
  342. [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Universal"]];
  343. }
  344. NSString *str = [formatter stringFromDate:date];
  345. // convert a "1804" year to "-"
  346. if ([str hasPrefix:@"1804-"] && [str length] > 5) {
  347. NSString *monthDayString = [str substringFromIndex:5];
  348. str = [NSString stringWithFormat:@"--%@", monthDayString];
  349. }
  350. [self setBirthday:str];
  351. }
  352. - (NSArray *)calendarLinks {
  353. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  354. return [self objectsForExtensionClass:[GDataContactCalendarLink class]];
  355. }
  356. - (void)setCalendarLinks:(NSArray *)array {
  357. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  358. [self setObjects:array forExtensionClass:[GDataContactCalendarLink class]];
  359. }
  360. - (void)addCalendarLink:(GDataContactCalendarLink *)obj {
  361. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  362. [self addObject:obj forExtensionClass:[GDataContactCalendarLink class]];
  363. }
  364. - (void)removeCalendarLink:(GDataContactCalendarLink *)obj {
  365. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  366. [self removeObject:obj forExtensionClass:[GDataContactCalendarLink class]];
  367. }
  368. - (GDataContactCalendarLink *)primaryCalendarLink {
  369. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  370. id obj = [self primaryObjectForExtensionClass:[GDataContactCalendarLink class]];
  371. return obj;
  372. }
  373. - (void)setPrimaryCalendarLink:(GDataContactCalendarLink *)obj {
  374. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  375. [self setPrimaryObject:obj forExtensionClass:[GDataContactCalendarLink class]];
  376. }
  377. - (NSString *)directoryServer {
  378. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  379. GDataContactDirectoryServer *obj;
  380. obj = [self objectForExtensionClass:[GDataContactDirectoryServer class]];
  381. return [obj stringValue];
  382. }
  383. - (void)setDirectoryServer:(NSString *)str {
  384. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  385. if ([str length] == 0) str = nil;
  386. GDataContactDirectoryServer *obj;
  387. obj = [GDataContactDirectoryServer valueWithString:str];
  388. [self setObject:obj forExtensionClass:[GDataContactDirectoryServer class]];
  389. }
  390. - (NSArray *)events {
  391. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  392. return [self objectsForExtensionClass:[GDataContactEvent class]];
  393. }
  394. - (void)setEvents:(NSArray *)array {
  395. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  396. [self setObjects:array forExtensionClass:[GDataContactEvent class]];
  397. }
  398. - (void)addEvent:(GDataContactEvent *)obj {
  399. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  400. [self addObject:obj forExtensionClass:[GDataContactEvent class]];
  401. }
  402. - (NSArray *)externalIDs {
  403. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  404. return [self objectsForExtensionClass:[GDataContactExternalID class]];
  405. }
  406. - (void)setExternalIDs:(NSArray *)array {
  407. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  408. [self setObjects:array forExtensionClass:[GDataContactExternalID class]];
  409. }
  410. - (void)addExternalID:(GDataContactExternalID *)obj {
  411. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  412. [self addObject:obj forExtensionClass:[GDataContactExternalID class]];
  413. }
  414. - (NSString *)gender {
  415. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  416. GDataContactGender *obj;
  417. obj = [self objectForExtensionClass:[GDataContactGender class]];
  418. return [obj stringValue];
  419. }
  420. - (void)setGender:(NSString *)str {
  421. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  422. if ([str length] == 0) str = nil;
  423. GDataContactGender *obj;
  424. obj = [GDataContactGender valueWithString:str];
  425. [self setObject:obj forExtensionClass:[GDataContactGender class]];
  426. }
  427. - (NSArray *)hobbies {
  428. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  429. return [self objectsForExtensionClass:[GDataContactHobby class]];
  430. }
  431. - (void)setHobbies:(NSArray *)array {
  432. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  433. [self setObjects:array forExtensionClass:[GDataContactHobby class]];
  434. }
  435. - (void)addHobby:(GDataContactHobby *)obj {
  436. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  437. [self addObject:obj forExtensionClass:[GDataContactHobby class]];
  438. }
  439. - (NSString *)initials {
  440. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  441. GDataContactInitials *obj;
  442. obj = [self objectForExtensionClass:[GDataContactInitials class]];
  443. return [obj stringValue];
  444. }
  445. - (void)setInitials:(NSString *)str {
  446. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  447. if ([str length] == 0) str = nil;
  448. GDataContactInitials *obj;
  449. obj = [GDataContactInitials valueWithString:str];
  450. [self setObject:obj forExtensionClass:[GDataContactInitials class]];
  451. }
  452. - (NSArray *)jots {
  453. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  454. return [self objectsForExtensionClass:[GDataContactJot class]];
  455. }
  456. - (void)setJots:(NSArray *)array {
  457. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  458. [self setObjects:array forExtensionClass:[GDataContactJot class]];
  459. }
  460. - (void)addJot:(GDataContactJot *)obj {
  461. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  462. [self addObject:obj forExtensionClass:[GDataContactJot class]];
  463. }
  464. - (NSArray *)languages {
  465. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  466. return [self objectsForExtensionClass:[GDataContactLanguage class]];
  467. }
  468. - (void)setLanguages:(NSArray *)array {
  469. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  470. [self setObjects:array forExtensionClass:[GDataContactLanguage class]];
  471. }
  472. - (void)addLanguage:(GDataContactLanguage *)obj {
  473. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  474. [self addObject:obj forExtensionClass:[GDataContactLanguage class]];
  475. }
  476. - (GDataWhere *)where {
  477. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  478. return [self objectForExtensionClass:[GDataWhere class]];
  479. }
  480. - (void)setWhere:(GDataWhere *)obj {
  481. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  482. [self setObject:obj forExtensionClass:[GDataWhere class]];
  483. }
  484. - (NSString *)maidenName {
  485. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  486. GDataContactMaidenName *obj;
  487. obj = [self objectForExtensionClass:[GDataContactMaidenName class]];
  488. return [obj stringValue];
  489. }
  490. - (void)setMaidenName:(NSString *)str {
  491. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  492. if ([str length] == 0) str = nil;
  493. GDataContactMaidenName *obj;
  494. obj = [GDataContactMaidenName valueWithString:str];
  495. [self setObject:obj forExtensionClass:[GDataContactMaidenName class]];
  496. }
  497. - (NSString *)mileage {
  498. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  499. GDataContactMileage *obj;
  500. obj = [self objectForExtensionClass:[GDataContactMileage class]];
  501. return [obj stringValue];
  502. }
  503. - (void)setMileage:(NSString *)str {
  504. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  505. if ([str length] == 0) str = nil;
  506. GDataContactMileage *obj;
  507. obj = [GDataContactMileage valueWithString:str];
  508. [self setObject:obj forExtensionClass:[GDataContactMileage class]];
  509. }
  510. - (GDataName *)name {
  511. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  512. GDataName *obj = [self objectForExtensionClass:[GDataName class]];
  513. return obj;
  514. }
  515. - (void)setName:(GDataName *)obj {
  516. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  517. [self setObject:obj forExtensionClass:[GDataName class]];
  518. }
  519. - (NSString *)nickname {
  520. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  521. GDataContactNickname *obj;
  522. obj = [self objectForExtensionClass:[GDataContactNickname class]];
  523. return [obj stringValue];
  524. }
  525. - (void)setNickname:(NSString *)str {
  526. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  527. if ([str length] == 0) str = nil;
  528. GDataContactNickname *obj;
  529. obj = [GDataContactNickname valueWithString:str];
  530. [self setObject:obj forExtensionClass:[GDataContactNickname class]];
  531. }
  532. - (NSString *)occupation {
  533. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  534. GDataContactOccupation *obj;
  535. obj = [self objectForExtensionClass:[GDataContactOccupation class]];
  536. return [obj stringValue];
  537. }
  538. - (void)setOccupation:(NSString *)str {
  539. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  540. if ([str length] == 0) str = nil;
  541. GDataContactOccupation *obj;
  542. obj = [GDataContactOccupation valueWithString:str];
  543. [self setObject:obj forExtensionClass:[GDataContactOccupation class]];
  544. }
  545. - (NSString *)priority {
  546. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  547. GDataContactPriority *obj;
  548. obj = [self objectForExtensionClass:[GDataContactPriority class]];
  549. return [obj rel];
  550. }
  551. - (void)setPriority:(NSString *)str {
  552. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  553. GDataContactPriority *obj;
  554. obj = [GDataContactPriority priorityWithRel:str];
  555. [self setObject:obj forExtensionClass:[GDataContactPriority class]];
  556. }
  557. - (NSArray *)relations {
  558. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  559. return [self objectsForExtensionClass:[GDataContactRelation class]];
  560. }
  561. - (void)setRelations:(NSArray *)array {
  562. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  563. [self setObjects:array forExtensionClass:[GDataContactRelation class]];
  564. }
  565. - (void)addRelation:(GDataContactRelation *)obj {
  566. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  567. [self addObject:obj forExtensionClass:[GDataContactRelation class]];
  568. }
  569. - (NSString *)sensitivity {
  570. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  571. GDataContactSensitivity *obj;
  572. obj = [self objectForExtensionClass:[GDataContactSensitivity class]];
  573. return [obj rel];
  574. }
  575. - (void)setSensitivity:(NSString *)str {
  576. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  577. GDataContactOccupation *obj;
  578. obj = [GDataContactSensitivity sensitivityWithRel:str];
  579. [self setObject:obj forExtensionClass:[GDataContactSensitivity class]];
  580. }
  581. - (NSString *)shortName {
  582. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  583. GDataContactShortName *obj;
  584. obj = [self objectForExtensionClass:[GDataContactShortName class]];
  585. return [obj stringValue];
  586. }
  587. - (void)setShortName:(NSString *)str {
  588. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  589. if ([str length] == 0) str = nil;
  590. GDataContactShortName *obj;
  591. obj = [GDataContactShortName valueWithString:str];
  592. [self setObject:obj forExtensionClass:[GDataContactShortName class]];
  593. }
  594. - (NSArray *)structuredPostalAddresses {
  595. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  596. return [self objectsForExtensionClass:[GDataStructuredPostalAddress class]];
  597. }
  598. - (void)setStructuredPostalAddresses:(NSArray *)arr {
  599. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  600. [self setObjects:arr forExtensionClass:[GDataStructuredPostalAddress class]];
  601. }
  602. - (void)addStructuredPostalAddress:(GDataStructuredPostalAddress *)obj {
  603. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  604. [self addObject:obj forExtensionClass:[GDataStructuredPostalAddress class]];
  605. }
  606. - (void)removeStructuredPostalAddress:(GDataStructuredPostalAddress *)obj {
  607. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  608. [self removeObject:obj forExtensionClass:[GDataStructuredPostalAddress class]];
  609. }
  610. - (GDataStructuredPostalAddress *)primaryStructuredPostalAddress {
  611. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  612. id obj = [self primaryObjectForExtensionClass:[GDataStructuredPostalAddress class]];
  613. return obj;
  614. }
  615. - (void)setPrimaryStructuredPostalAddress:(GDataStructuredPostalAddress *)obj {
  616. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  617. [self setPrimaryObject:obj forExtensionClass:[GDataStructuredPostalAddress class]];
  618. }
  619. - (NSString *)subject {
  620. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  621. GDataContactSubject *obj;
  622. obj = [self objectForExtensionClass:[GDataContactSubject class]];
  623. return [obj stringValue];
  624. }
  625. - (void)setSubject:(NSString *)str {
  626. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  627. if ([str length] == 0) str = nil;
  628. GDataContactSubject *obj;
  629. obj = [GDataContactSubject valueWithString:str];
  630. [self setObject:obj forExtensionClass:[GDataContactSubject class]];
  631. }
  632. - (NSArray *)userDefinedFields {
  633. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  634. return [self objectsForExtensionClass:[GDataContactUserDefinedField class]];
  635. }
  636. - (void)setUserDefinedFields:(NSArray *)arr {
  637. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  638. [self setObjects:arr forExtensionClass:[GDataContactUserDefinedField class]];
  639. }
  640. - (void)addUserDefinedField:(GDataContactUserDefinedField *)obj {
  641. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  642. [self addObject:obj forExtensionClass:[GDataContactUserDefinedField class]];
  643. }
  644. - (void)removeUserDefinedField:(GDataContactUserDefinedField *)obj {
  645. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  646. [self removeObject:obj forExtensionClass:[GDataContactUserDefinedField class]];
  647. }
  648. - (NSArray *)websiteLinks {
  649. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  650. return [self objectsForExtensionClass:[GDataContactWebsiteLink class]];
  651. }
  652. - (void)setWebsiteLinks:(NSArray *)array {
  653. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  654. [self setObjects:array forExtensionClass:[GDataContactWebsiteLink class]];
  655. }
  656. - (void)addWebsiteLink:(GDataContactWebsiteLink *)obj {
  657. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  658. [self addObject:obj forExtensionClass:[GDataContactWebsiteLink class]];
  659. }
  660. - (void)removeWebsiteLink:(GDataContactWebsiteLink *)obj {
  661. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  662. [self removeObject:obj forExtensionClass:[GDataContactWebsiteLink class]];
  663. }
  664. - (GDataContactWebsiteLink *)primaryWebsiteLink {
  665. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  666. id obj = [self primaryObjectForExtensionClass:[GDataContactWebsiteLink class]];
  667. return obj;
  668. }
  669. - (void)setPrimaryWebsiteLink:(GDataContactWebsiteLink *)obj {
  670. GDATA_DEBUG_ASSERT_MIN_SERVICE_VERSION(kGDataContactServiceV3);
  671. [self setPrimaryObject:obj forExtensionClass:[GDataContactWebsiteLink class]];
  672. }
  673. #pragma mark -
  674. - (GDataLink *)photoLink {
  675. return [self linkWithRelAttributeValue:kGDataContactPhotoRel];
  676. }
  677. @end
  678. #endif // !GDATA_REQUIRE_SERVICE_INCLUDES || GDATA_INCLUDE_CONTACTS_SERVICE