/core/externals/update-engine/externals/gdata-objectivec-client/Source/Elements/GDataName.m

http://macfuse.googlecode.com/ · Objective C · 319 lines · 206 code · 78 blank · 35 comment · 9 complexity · 13b91a588a90726e400db17aa6d1de81 MD5 · raw file

  1. /* Copyright (c) 2009 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. // GDataName.m
  17. //
  18. #if !GDATA_REQUIRE_SERVICE_INCLUDES || GDATA_INCLUDE_CONTACTS_SERVICE
  19. #import "GDataName.h"
  20. #import "GDataValueConstruct.h"
  21. //
  22. // private internal classes used as extensions by GDataName
  23. //
  24. @interface GDataNameAdditional : GDataNameElement <GDataExtension>
  25. @end
  26. @implementation GDataNameAdditional;
  27. + (NSString *)extensionElementURI { return kGDataNamespaceGData; }
  28. + (NSString *)extensionElementPrefix { return kGDataNamespaceGDataPrefix; }
  29. + (NSString *)extensionElementLocalName { return @"additionalName"; }
  30. @end
  31. @interface GDataNameFamily : GDataNameElement <GDataExtension>
  32. @end
  33. @implementation GDataNameFamily;
  34. + (NSString *)extensionElementURI { return kGDataNamespaceGData; }
  35. + (NSString *)extensionElementPrefix { return kGDataNamespaceGDataPrefix; }
  36. + (NSString *)extensionElementLocalName { return @"familyName"; }
  37. @end
  38. @interface GDataNameFull : GDataNameElement <GDataExtension>
  39. @end
  40. @implementation GDataNameFull;
  41. + (NSString *)extensionElementURI { return kGDataNamespaceGData; }
  42. + (NSString *)extensionElementPrefix { return kGDataNamespaceGDataPrefix; }
  43. + (NSString *)extensionElementLocalName { return @"fullName"; }
  44. @end
  45. @interface GDataNameGiven : GDataNameElement <GDataExtension>
  46. @end
  47. @implementation GDataNameGiven;
  48. + (NSString *)extensionElementURI { return kGDataNamespaceGData; }
  49. + (NSString *)extensionElementPrefix { return kGDataNamespaceGDataPrefix; }
  50. + (NSString *)extensionElementLocalName { return @"givenName"; }
  51. @end
  52. @interface GDataNamePrefix : GDataValueElementConstruct <GDataExtension>
  53. @end
  54. @implementation GDataNamePrefix;
  55. + (NSString *)extensionElementURI { return kGDataNamespaceGData; }
  56. + (NSString *)extensionElementPrefix { return kGDataNamespaceGDataPrefix; }
  57. + (NSString *)extensionElementLocalName { return @"namePrefix"; }
  58. @end
  59. @interface GDataNameSuffix : GDataValueElementConstruct <GDataExtension>
  60. @end
  61. @implementation GDataNameSuffix;
  62. + (NSString *)extensionElementURI { return kGDataNamespaceGData; }
  63. + (NSString *)extensionElementPrefix { return kGDataNamespaceGDataPrefix; }
  64. + (NSString *)extensionElementLocalName { return @"nameSuffix"; }
  65. @end
  66. //
  67. // GDataNameElement is the base class for the full, given, family, and
  68. // additional name elements. Each name element has a string value and
  69. // an optional yomi attribute for pronunciation.
  70. //
  71. @implementation GDataNameElement
  72. static NSString* const kYomiAttr = @"yomi";
  73. + (id)nameElementWithString:(NSString *)str {
  74. // the contacts API does not want empty name elements
  75. if ([str length] == 0) return nil;
  76. GDataNameElement *obj = [self object];
  77. [obj setStringValue:str];
  78. return obj;
  79. }
  80. // internal method for converting name element types, since the setters below
  81. // take a generic GDataNameElement argument, but those don't have the extension
  82. // methods specifying localName, etc
  83. + (id)nameElementWithNameElement:(GDataNameElement *)source {
  84. GDataNameElement *obj = [self object];
  85. [obj setStringValue:[source stringValue]];
  86. [obj setYomi:[source yomi]];
  87. return obj;
  88. }
  89. - (void)addParseDeclarations {
  90. [self addLocalAttributeDeclarations:[NSArray arrayWithObject:kYomiAttr]];
  91. [self addContentValueDeclaration];
  92. }
  93. - (NSString *)stringValue {
  94. return [self contentStringValue];
  95. }
  96. - (void)setStringValue:(NSString *)str {
  97. [self setContentStringValue:str];
  98. }
  99. - (NSString *)yomi {
  100. return [self stringValueForAttribute:kYomiAttr];
  101. }
  102. - (void)setYomi:(NSString *)str {
  103. // the contacts API does not want empty name elements
  104. if ([str length] == 0) str = nil;
  105. [self setStringValue:str forAttribute:kYomiAttr];
  106. }
  107. @end
  108. //
  109. // GDataName class
  110. //
  111. @implementation GDataName
  112. + (NSString *)extensionElementURI { return kGDataNamespaceGData; }
  113. + (NSString *)extensionElementPrefix { return kGDataNamespaceGDataPrefix; }
  114. + (NSString *)extensionElementLocalName { return @"name"; }
  115. + (GDataName *)name {
  116. GDataName* obj = [self object];
  117. return obj;
  118. }
  119. + (GDataName *)nameWithFullNameString:(NSString *)str {
  120. GDataName* obj = [self object];
  121. [obj setFullNameWithString:str];
  122. return obj;
  123. }
  124. + (GDataName *)nameWithPrefix:(NSString *)prefix
  125. givenString:(NSString *)first
  126. additionalString:(NSString *)middle
  127. familyString:(NSString *)last
  128. suffix:(NSString *)suffix {
  129. GDataName* obj = [self object];
  130. [obj setNamePrefix:prefix];
  131. [obj setGivenNameWithString:first];
  132. [obj setAdditionalNameWithString:middle];
  133. [obj setFamilyNameWithString:last];
  134. [obj setNameSuffix:suffix];
  135. return obj;
  136. }
  137. - (void)addExtensionDeclarations {
  138. [super addExtensionDeclarations];
  139. [self addExtensionDeclarationForParentClass:[self class]
  140. childClasses:
  141. [GDataNameAdditional class],
  142. [GDataNameFamily class],
  143. [GDataNameFull class],
  144. [GDataNameGiven class],
  145. [GDataNamePrefix class],
  146. [GDataNameSuffix class],
  147. nil];
  148. }
  149. #if !GDATA_SIMPLE_DESCRIPTIONS
  150. - (NSMutableArray *)itemsForDescription {
  151. static struct GDataDescriptionRecord descRecs[] = {
  152. { @"prefix", @"namePrefix", kGDataDescValueLabeled },
  153. { @"given", @"givenName.stringValue", kGDataDescValueLabeled },
  154. { @"additional", @"additionalName.stringValue", kGDataDescValueLabeled },
  155. { @"family", @"familyName.stringValue", kGDataDescValueLabeled },
  156. { @"suffix", @"nameSuffix", kGDataDescValueLabeled },
  157. { @"full", @"fullName.stringValue", kGDataDescValueLabeled },
  158. { nil, nil, (GDataDescRecTypes)0 }
  159. };
  160. NSMutableArray *items = [super itemsForDescription];
  161. [self addDescriptionRecords:descRecs toItems:items];
  162. return items;
  163. }
  164. #endif
  165. #pragma mark -
  166. - (GDataNameElement *)additionalName {
  167. GDataNameAdditional *obj;
  168. obj = [self objectForExtensionClass:[GDataNameAdditional class]];
  169. return obj;
  170. }
  171. - (void)setAdditionalName:(GDataNameElement *)obj {
  172. GDataNameAdditional *typedObj = [GDataNameAdditional nameElementWithNameElement:obj];
  173. [self setObject:typedObj forExtensionClass:[GDataNameAdditional class]];
  174. }
  175. - (void)setAdditionalNameWithString:(NSString *)str {
  176. GDataNameAdditional *obj = [GDataNameAdditional nameElementWithString:str];
  177. [self setObject:obj forExtensionClass:[GDataNameAdditional class]];
  178. }
  179. - (GDataNameElement *)familyName {
  180. GDataNameFamily *obj;
  181. obj = [self objectForExtensionClass:[GDataNameFamily class]];
  182. return obj;
  183. }
  184. - (void)setFamilyName:(GDataNameElement *)obj {
  185. GDataNameFamily *typedObj = [GDataNameFamily nameElementWithNameElement:obj];
  186. [self setObject:typedObj forExtensionClass:[GDataNameFamily class]];
  187. }
  188. - (void)setFamilyNameWithString:(NSString *)str {
  189. GDataNameFamily *obj = [GDataNameFamily nameElementWithString:str];
  190. [self setObject:obj forExtensionClass:[GDataNameFamily class]];
  191. }
  192. - (GDataNameElement *)fullName {
  193. GDataNameFull *obj;
  194. obj = [self objectForExtensionClass:[GDataNameFull class]];
  195. return obj;
  196. }
  197. - (void)setFullName:(GDataNameElement *)obj {
  198. GDataNameFull *typedObj = [GDataNameFull nameElementWithNameElement:obj];
  199. [self setObject:typedObj forExtensionClass:[GDataNameFull class]];
  200. }
  201. - (void)setFullNameWithString:(NSString *)str {
  202. GDataNameFull *obj = [GDataNameFull nameElementWithString:str];
  203. [self setObject:obj forExtensionClass:[GDataNameFull class]];
  204. }
  205. - (GDataNameElement *)givenName {
  206. GDataNameGiven *obj;
  207. obj = [self objectForExtensionClass:[GDataNameGiven class]];
  208. return obj;
  209. }
  210. - (void)setGivenName:(GDataNameElement *)obj {
  211. GDataNameGiven *typedObj = [GDataNameGiven nameElementWithNameElement:obj];
  212. [self setObject:typedObj forExtensionClass:[GDataNameGiven class]];
  213. }
  214. - (void)setGivenNameWithString:(NSString *)str {
  215. GDataNameGiven *obj = [GDataNameGiven nameElementWithString:str];
  216. [self setObject:obj forExtensionClass:[GDataNameGiven class]];
  217. }
  218. - (NSString *)namePrefix {
  219. GDataNamePrefix *obj;
  220. obj = [self objectForExtensionClass:[GDataNamePrefix class]];
  221. return [obj stringValue];
  222. }
  223. - (void)setNamePrefix:(NSString *)str {
  224. // the contacts API does not want empty name elements
  225. if ([str length] == 0) str = nil;
  226. GDataNamePrefix *obj = [GDataNamePrefix valueWithString:str];
  227. [self setObject:obj forExtensionClass:[GDataNamePrefix class]];
  228. }
  229. - (NSString *)nameSuffix {
  230. GDataNameSuffix *obj;
  231. obj = [self objectForExtensionClass:[GDataNameSuffix class]];
  232. return [obj stringValue];
  233. }
  234. - (void)setNameSuffix:(NSString *)str {
  235. // the contacts API does not want empty name elements
  236. if ([str length] == 0) str = nil;
  237. GDataNameSuffix *obj = [GDataNameSuffix valueWithString:str];
  238. [self setObject:obj forExtensionClass:[GDataNameSuffix class]];
  239. }
  240. @end
  241. #endif // !GDATA_REQUIRE_SERVICE_INCLUDES || GDATA_INCLUDE_CONTACTS_SERVICE