/core/externals/update-engine/externals/gdata-objectivec-client/Source/Clients/Docs/GDataEntryDocBase.m

http://macfuse.googlecode.com/ · Objective C · 458 lines · 344 code · 92 blank · 22 comment · 12 complexity · b0bb53b573364f53b0814607f4da1b7a MD5 · raw file

  1. /* Copyright (c) 2007 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. // GDataEntryDocBase.m
  17. //
  18. #if !GDATA_REQUIRE_SERVICE_INCLUDES || GDATA_INCLUDE_DOCS_SERVICE
  19. #import "GDataEntryDocBase.h"
  20. #import "GDataDocElements.h"
  21. @interface GDataLastViewed : GDataValueElementConstruct <GDataExtension>
  22. @end
  23. @implementation GDataLastViewed
  24. + (NSString *)extensionElementURI { return kGDataNamespaceGData; }
  25. + (NSString *)extensionElementPrefix { return kGDataNamespaceGDataPrefix; }
  26. + (NSString *)extensionElementLocalName { return @"lastViewed"; }
  27. @end
  28. @interface GDataSharedWithMe : GDataValueElementConstruct <GDataExtension>
  29. @end
  30. @implementation GDataSharedWithMe
  31. + (NSString *)extensionElementURI { return kGDataNamespaceDocuments; }
  32. + (NSString *)extensionElementPrefix { return kGDataNamespaceDocumentsPrefix; }
  33. + (NSString *)extensionElementLocalName { return @"sharedWithMeDate"; }
  34. @end
  35. @interface GDataLastModifiedByMe : GDataValueElementConstruct <GDataExtension>
  36. @end
  37. @implementation GDataLastModifiedByMe
  38. + (NSString *)extensionElementURI { return kGDataNamespaceDocuments; }
  39. + (NSString *)extensionElementPrefix { return kGDataNamespaceDocumentsPrefix; }
  40. + (NSString *)extensionElementLocalName { return @"modifiedByMeDate"; }
  41. @end
  42. @interface GDataWritersCanInvite : GDataBoolValueConstruct <GDataExtension>
  43. @end
  44. @implementation GDataWritersCanInvite
  45. + (NSString *)extensionElementURI { return kGDataNamespaceDocuments; }
  46. + (NSString *)extensionElementPrefix { return kGDataNamespaceDocumentsPrefix; }
  47. + (NSString *)extensionElementLocalName { return @"writersCanInvite"; }
  48. @end
  49. @interface GDataDocDescription : GDataValueElementConstruct <GDataExtension>
  50. @end
  51. @implementation GDataDocDescription
  52. + (NSString *)extensionElementURI { return kGDataNamespaceDocuments; }
  53. + (NSString *)extensionElementPrefix { return kGDataNamespaceDocumentsPrefix; }
  54. + (NSString *)extensionElementLocalName { return @"description"; }
  55. @end
  56. @interface GDataDocMD5Checksum : GDataValueElementConstruct <GDataExtension>
  57. @end
  58. @implementation GDataDocMD5Checksum
  59. + (NSString *)extensionElementURI { return kGDataNamespaceDocuments; }
  60. + (NSString *)extensionElementPrefix { return kGDataNamespaceDocumentsPrefix; }
  61. + (NSString *)extensionElementLocalName { return @"md5Checksum"; }
  62. @end
  63. @interface GDataDocChangestamp : GDataValueConstruct <GDataExtension>
  64. @end
  65. @implementation GDataDocChangestamp
  66. + (NSString *)extensionElementURI { return kGDataNamespaceDocuments; }
  67. + (NSString *)extensionElementPrefix { return kGDataNamespaceDocumentsPrefix; }
  68. + (NSString *)extensionElementLocalName { return @"changestamp"; }
  69. @end
  70. @interface GDataDocRemoved : GDataImplicitValueConstruct <GDataExtension>
  71. @end
  72. @implementation GDataDocRemoved
  73. + (NSString *)extensionElementURI { return kGDataNamespaceDocuments; }
  74. + (NSString *)extensionElementPrefix { return kGDataNamespaceDocumentsPrefix; }
  75. + (NSString *)extensionElementLocalName { return @"removed"; }
  76. @end
  77. @interface GDataDocFilename : GDataValueElementConstruct <GDataExtension>
  78. @end
  79. @implementation GDataDocFilename
  80. + (NSString *)extensionElementURI { return kGDataNamespaceDocuments; }
  81. + (NSString *)extensionElementPrefix { return kGDataNamespaceDocumentsPrefix; }
  82. + (NSString *)extensionElementLocalName { return @"filename"; }
  83. @end
  84. @interface GDataDocSuggestedFilename : GDataValueElementConstruct <GDataExtension>
  85. @end
  86. @implementation GDataDocSuggestedFilename
  87. + (NSString *)extensionElementURI { return kGDataNamespaceDocuments; }
  88. + (NSString *)extensionElementPrefix { return kGDataNamespaceDocumentsPrefix; }
  89. + (NSString *)extensionElementLocalName { return @"suggestedFilename"; }
  90. @end
  91. @interface GDataDocLastCommented : GDataValueElementConstruct <GDataExtension>
  92. @end
  93. @implementation GDataDocLastCommented
  94. + (NSString *)extensionElementURI { return kGDataNamespaceDocuments; }
  95. + (NSString *)extensionElementPrefix { return kGDataNamespaceDocumentsPrefix; }
  96. + (NSString *)extensionElementLocalName { return @"lastCommented"; }
  97. @end
  98. @implementation GDataEntryDocBase
  99. + (NSString *)coreProtocolVersionForServiceVersion:(NSString *)serviceVersion {
  100. return [GDataDocConstants coreProtocolVersionForServiceVersion:serviceVersion];
  101. }
  102. + (id)documentEntry {
  103. GDataEntryDocBase *entry = [self object];
  104. [entry setNamespaces:[GDataDocConstants baseDocumentNamespaces]];
  105. return entry;
  106. }
  107. - (void)addExtensionDeclarations {
  108. [super addExtensionDeclarations];
  109. // ACL feed URL is in a gd:feedLink
  110. [self addExtensionDeclarationForParentClass:[self class]
  111. childClasses:
  112. [GDataFeedLink class],
  113. [GDataLastViewed class],
  114. [GDataSharedWithMe class],
  115. [GDataLastModifiedByMe class],
  116. [GDataWritersCanInvite class],
  117. [GDataLastModifiedBy class],
  118. [GDataQuotaBytesUsed class],
  119. [GDataDocDescription class],
  120. [GDataDocMD5Checksum class],
  121. [GDataDocChangestamp class],
  122. [GDataDocFilename class],
  123. [GDataDocSuggestedFilename class],
  124. [GDataDocLastCommented class],
  125. [GDataDocRemoved class],
  126. nil];
  127. }
  128. #if !GDATA_SIMPLE_DESCRIPTIONS
  129. - (NSMutableArray *)itemsForDescription {
  130. static struct GDataDescriptionRecord descRecs[] = {
  131. { @"lastViewed", @"lastViewed", kGDataDescValueLabeled },
  132. { @"sharedWithMe", @"sharedWithMe", kGDataDescValueLabeled },
  133. { @"lastModifiedByMe", @"lastModifiedByMe", kGDataDescValueLabeled },
  134. { @"writersCanInvite", @"writersCanInvite", kGDataDescValueLabeled },
  135. { @"lastModifiedBy", @"lastModifiedBy", kGDataDescValueLabeled },
  136. { @"quotaUsed", @"quotaBytesUsed", kGDataDescValueLabeled },
  137. { @"desc", @"documentDescription", kGDataDescValueLabeled },
  138. { @"md5", @"MD5Checksum", kGDataDescValueLabeled },
  139. { @"changestamp", @"changestamp", kGDataDescValueLabeled },
  140. { @"filename", @"filename", kGDataDescValueLabeled },
  141. { @"suggestedFilename", @"suggestedFilename", kGDataDescValueLabeled },
  142. { @"lastCommented", @"lastCommented", kGDataDescValueLabeled },
  143. { @"removed", @"removed", kGDataDescBooleanPresent },
  144. { nil, nil, (GDataDescRecTypes)0 }
  145. };
  146. NSMutableArray *items = [super itemsForDescription];
  147. [self addDescriptionRecords:descRecs toItems:items];
  148. return items;
  149. }
  150. #endif
  151. #pragma mark -
  152. - (GDataDateTime *)lastViewed {
  153. GDataLastViewed *obj = [self objectForExtensionClass:[GDataLastViewed class]];
  154. return [obj dateTimeValue];
  155. }
  156. - (void)setLastViewed:(GDataDateTime *)dateTime {
  157. GDataLastViewed *obj = [GDataLastViewed valueWithDateTime:dateTime];
  158. [self setObject:obj forExtensionClass:[GDataLastViewed class]];
  159. }
  160. - (GDataDateTime *)sharedWithMe {
  161. GDataSharedWithMe *obj =
  162. [self objectForExtensionClass:[GDataSharedWithMe class]];
  163. return [obj dateTimeValue];
  164. }
  165. - (void)setSharedWithMe:(GDataDateTime *)dateTime {
  166. GDataSharedWithMe *obj = [GDataSharedWithMe valueWithDateTime:dateTime];
  167. [self setObject:obj forExtensionClass:[GDataSharedWithMe class]];
  168. }
  169. - (GDataDateTime *)lastModifiedByMe {
  170. GDataLastModifiedByMe *obj =
  171. [self objectForExtensionClass:[GDataLastModifiedByMe class]];
  172. return [obj dateTimeValue];
  173. }
  174. - (void)setLastModifiedByMe:(GDataDateTime *)dateTime {
  175. GDataLastModifiedByMe *obj = [GDataLastModifiedByMe valueWithDateTime:dateTime];
  176. [self setObject:obj forExtensionClass:[GDataLastModifiedByMe class]];
  177. }
  178. - (NSNumber *)writersCanInvite { // bool
  179. GDataWritersCanInvite *obj = [self objectForExtensionClass:[GDataWritersCanInvite class]];
  180. return [obj boolNumberValue];
  181. }
  182. - (void)setWritersCanInvite:(NSNumber *)num {
  183. GDataWritersCanInvite *obj = [GDataWritersCanInvite valueWithNumber:num];
  184. [self setObject:obj forExtensionClass:[GDataWritersCanInvite class]];
  185. }
  186. - (GDataPerson *)lastModifiedBy {
  187. GDataLastModifiedBy *obj = [self objectForExtensionClass:[GDataLastModifiedBy class]];
  188. return obj;
  189. }
  190. - (void)setLastModifiedBy:(GDataPerson *)obj {
  191. [self setObject:obj forExtensionClass:[GDataLastModifiedBy class]];
  192. }
  193. - (NSNumber *)quotaBytesUsed { // long long
  194. GDataQuotaBytesUsed *obj = [self objectForExtensionClass:[GDataQuotaBytesUsed class]];
  195. return [obj longLongNumberValue];
  196. }
  197. - (void)setQuotaBytesUsed:(NSNumber *)num {
  198. GDataQuotaBytesUsed *obj = [GDataQuotaBytesUsed valueWithNumber:num];
  199. [self setObject:obj forExtensionClass:[GDataQuotaBytesUsed class]];
  200. }
  201. - (NSString *)documentDescription {
  202. GDataDocDescription *obj;
  203. obj = [self objectForExtensionClass:[GDataDocDescription class]];
  204. return [obj stringValue];
  205. }
  206. - (void)setDocumentDescription:(NSString *)str {
  207. GDataDocDescription *obj = [GDataDocDescription valueWithString:str];
  208. [self setObject:obj forExtensionClass:[GDataDocDescription class]];
  209. }
  210. - (NSString *)MD5Checksum {
  211. GDataDocMD5Checksum *obj;
  212. obj = [self objectForExtensionClass:[GDataDocMD5Checksum class]];
  213. return [obj stringValue];
  214. }
  215. - (void)setMD5Checksum:(NSString *)str {
  216. GDataDocMD5Checksum *obj = [GDataDocMD5Checksum valueWithString:str];
  217. [self setObject:obj forExtensionClass:[GDataDocMD5Checksum class]];
  218. }
  219. - (NSString *)filename {
  220. GDataDocFilename *obj;
  221. obj = [self objectForExtensionClass:[GDataDocFilename class]];
  222. return [obj stringValue];
  223. }
  224. - (void)setFilename:(NSString *)str {
  225. GDataDocFilename *obj = [GDataDocFilename valueWithString:str];
  226. [self setObject:obj forExtensionClass:[GDataDocFilename class]];
  227. }
  228. - (NSString *)suggestedFilename {
  229. GDataDocSuggestedFilename *obj;
  230. obj = [self objectForExtensionClass:[GDataDocSuggestedFilename class]];
  231. return [obj stringValue];
  232. }
  233. - (void)setSuggestedFilename:(NSString *)str {
  234. GDataDocSuggestedFilename *obj = [GDataDocSuggestedFilename valueWithString:str];
  235. [self setObject:obj forExtensionClass:[GDataDocSuggestedFilename class]];
  236. }
  237. - (GDataDateTime *)lastCommented {
  238. GDataDocLastCommented *obj;
  239. obj = [self objectForExtensionClass:[GDataDocLastCommented class]];
  240. return [obj dateTimeValue];
  241. }
  242. - (void)setLastCommented:(GDataDateTime *)dateTime {
  243. GDataDocLastCommented *obj = [GDataDocLastCommented valueWithDateTime:dateTime];
  244. [self setObject:obj forExtensionClass:[GDataDocLastCommented class]];
  245. }
  246. - (NSNumber *)changestamp {
  247. GDataDocChangestamp *obj;
  248. obj = [self objectForExtensionClass:[GDataDocChangestamp class]];
  249. return [obj longLongNumberValue];
  250. }
  251. - (void)setChangestamp:(NSNumber *)num {
  252. GDataDocChangestamp *obj = [GDataDocChangestamp valueWithNumber:num];
  253. [self setObject:obj forExtensionClass:[GDataDocChangestamp class]];
  254. }
  255. - (BOOL)isRemoved {
  256. GDataDocRemoved *obj = [self objectForExtensionClass:[GDataDocRemoved class]];
  257. return (obj != nil);
  258. }
  259. - (void)setIsRemoved:(BOOL)flag {
  260. GDataDocRemoved *private = flag ? [GDataDocRemoved implicitValue] : nil;
  261. [self setObject:private forExtensionClass:[GDataDocRemoved class]];
  262. }
  263. - (BOOL)hasPathToRoot {
  264. BOOL flag = [GDataCategory categories:[self categories]
  265. containsCategoryWithScheme:nil
  266. term:nil
  267. label:kGDataCategoryLabelHasPathToRoot];
  268. return flag;
  269. }
  270. - (void)setHasPathToRoot:(BOOL)flag {
  271. GDataCategory *cat = [GDataCategory categoryWithLabel:kGDataCategoryLabelHasPathToRoot];
  272. if (flag) {
  273. [self addCategory:cat];
  274. } else {
  275. [self removeCategory:cat];
  276. }
  277. }
  278. #pragma mark -
  279. - (BOOL)isStarred {
  280. BOOL flag = [GDataCategory categories:[self categories]
  281. containsCategoryWithLabel:kGDataCategoryLabelStarred];
  282. return flag;
  283. }
  284. - (void)setIsStarred:(BOOL)flag {
  285. GDataCategory *cat = [GDataCategory categoryWithLabel:kGDataCategoryLabelStarred];
  286. if (flag) {
  287. [self addCategory:cat];
  288. } else {
  289. [self removeCategory:cat];
  290. }
  291. }
  292. - (BOOL)isHidden {
  293. BOOL flag = [GDataCategory categories:[self categories]
  294. containsCategoryWithLabel:kGDataCategoryLabelHidden];
  295. return flag;
  296. }
  297. - (void)setIsHidden:(BOOL)flag {
  298. GDataCategory *cat = [GDataCategory categoryWithLabel:kGDataCategoryLabelHidden];
  299. if (flag) {
  300. [self addCategory:cat];
  301. } else {
  302. [self removeCategory:cat];
  303. }
  304. }
  305. - (BOOL)isViewed {
  306. BOOL flag = [GDataCategory categories:[self categories]
  307. containsCategoryWithLabel:kGDataCategoryLabelViewed];
  308. return flag;
  309. }
  310. - (void)setIsViewed:(BOOL)flag {
  311. GDataCategory *cat = [GDataCategory categoryWithLabel:kGDataCategoryLabelViewed];
  312. if (flag) {
  313. [self addCategory:cat];
  314. } else {
  315. [self removeCategory:cat];
  316. }
  317. }
  318. - (BOOL)isShared {
  319. BOOL flag = [GDataCategory categories:[self categories]
  320. containsCategoryWithLabel:kGDataCategoryLabelShared];
  321. return flag;
  322. }
  323. - (void)setIsShared:(BOOL)flag {
  324. GDataCategory *cat = [GDataCategory categoryWithLabel:kGDataCategoryLabelShared];
  325. if (flag) {
  326. [self addCategory:cat];
  327. } else {
  328. [self removeCategory:cat];
  329. }
  330. }
  331. #pragma mark -
  332. - (NSArray *)parentLinks {
  333. return [self linksWithRelAttributeValue:kGDataCategoryDocParent];
  334. }
  335. - (GDataLink *)thumbnailLink {
  336. return [self linkWithRelAttributeValue:kGDataDocsThumbnailRel];
  337. }
  338. - (GDataLink *)alternateSelfLink {
  339. return [self linkWithRelAttributeValue:kGDataDocsAlternateSelfRel];
  340. }
  341. - (GDataFeedLink *)feedLinkForRel:(NSString *)rel {
  342. NSArray *feedLinks = [self objectsForExtensionClass:[GDataFeedLink class]];
  343. GDataFeedLink *resultFeedLink;
  344. resultFeedLink = [GDataUtilities firstObjectFromArray:feedLinks
  345. withValue:rel
  346. forKeyPath:@"rel"];
  347. return resultFeedLink;
  348. }
  349. - (GDataFeedLink *)ACLFeedLink {
  350. // GDataEntryACL has an ACLLink method to get an entry's atom:link for
  351. // the ACL feed, but the docs feed puts the ACL link into a gd:feedLink
  352. // instead of into an atom:link
  353. // same as kGDataLinkRelACL but avoids the dependence on GDataEntryACL.h
  354. NSString* const kACLRel = @"http://schemas.google.com/acl/2007#accessControlList";
  355. GDataFeedLink *feedLink = [self feedLinkForRel:kACLRel];
  356. return feedLink;
  357. }
  358. - (GDataFeedLink *)revisionFeedLink {
  359. GDataFeedLink *feedLink = [self feedLinkForRel:kGDataDocsRevisionsRel];
  360. return feedLink;
  361. }
  362. + (NSString *)defaultServiceVersion {
  363. return kGDataDocsDefaultServiceVersion;
  364. }
  365. @end
  366. #endif // !GDATA_REQUIRE_SERVICE_INCLUDES || GDATA_INCLUDE_DOCS_SERVICE