OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/gdata/drive_api_parser.h" | 5 #include "chrome/browser/chromeos/gdata/drive_api_parser.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 return true; | 30 return true; |
31 } | 31 } |
32 | 32 |
33 // Drive v2 API JSON names. | 33 // Drive v2 API JSON names. |
34 | 34 |
35 // Common | 35 // Common |
36 const char kKind[] = "kind"; | 36 const char kKind[] = "kind"; |
37 const char kId[] = "id"; | 37 const char kId[] = "id"; |
38 const char kETag[] = "etag"; | 38 const char kETag[] = "etag"; |
39 const char kItems[] = "items"; | 39 const char kItems[] = "items"; |
| 40 const char kLargestChangeId[] = "largestChangeId"; |
40 | 41 |
41 // About Resource: | 42 // About Resource: |
42 const char kAboutKind[] = "drive#about"; | 43 const char kAboutKind[] = "drive#about"; |
43 const char kRootFolderId[] = "rootFolderId"; | 44 const char kRootFolderId[] = "rootFolderId"; |
44 const char kQuotaBytesTotal[] = "quotaBytesTotal"; | 45 const char kQuotaBytesTotal[] = "quotaBytesTotal"; |
45 const char kQuotaBytesUsed[] = "quotaBytesUsed"; | 46 const char kQuotaBytesUsed[] = "quotaBytesUsed"; |
46 const char kLargestChangeId[] = "largestChangeId"; | |
47 | 47 |
48 // App Icon: | 48 // App Icon: |
49 const char kCategory[] = "category"; | 49 const char kCategory[] = "category"; |
50 const char kSize[] = "size"; | 50 const char kSize[] = "size"; |
51 const char kIconUrl[] = "iconUrl"; | 51 const char kIconUrl[] = "iconUrl"; |
52 | 52 |
53 // Apps Resource: | 53 // Apps Resource: |
54 const char kAppKind[] = "drive#app"; | 54 const char kAppKind[] = "drive#app"; |
55 const char kName[] = "name"; | 55 const char kName[] = "name"; |
56 const char kObjectType[] = "objectType"; | 56 const char kObjectType[] = "objectType"; |
57 const char kSupportsCreate[] = "supportsCreate"; | 57 const char kSupportsCreate[] = "supportsCreate"; |
58 const char kSupportsImport[] = "supportsImport"; | 58 const char kSupportsImport[] = "supportsImport"; |
59 const char kInstalled[] = "installed"; | 59 const char kInstalled[] = "installed"; |
60 const char kAuthorized[] = "authorized"; | 60 const char kAuthorized[] = "authorized"; |
61 const char kProductUrl[] = "productUrl"; | 61 const char kProductUrl[] = "productUrl"; |
62 const char kPrimaryMimeTypes[] = "primaryMimeTypes"; | 62 const char kPrimaryMimeTypes[] = "primaryMimeTypes"; |
63 const char kSecondaryMimeTypes[] = "secondaryMimeTypes"; | 63 const char kSecondaryMimeTypes[] = "secondaryMimeTypes"; |
64 const char kPrimaryFileExtensions[] = "primaryFileExtensions"; | 64 const char kPrimaryFileExtensions[] = "primaryFileExtensions"; |
65 const char kSecondaryFileExtensions[] = "secondaryFileExtensions"; | 65 const char kSecondaryFileExtensions[] = "secondaryFileExtensions"; |
66 const char kIcons[] = "icons"; | 66 const char kIcons[] = "icons"; |
67 | 67 |
68 // Apps List: | 68 // Apps List: |
69 const char kAppListKind[] = "drive#appList"; | 69 const char kAppListKind[] = "drive#appList"; |
70 | 70 |
| 71 // Parent Resource: |
| 72 const char kParentReferenceKind[] = "drive#parentReference"; |
| 73 const char kIsRoot[] = "isRoot"; |
| 74 |
71 // File Resource: | 75 // File Resource: |
72 const char kFileKind[] = "drive#file"; | 76 const char kFileKind[] = "drive#file"; |
73 const char kMimeType[] = "mimeType"; | 77 const char kMimeType[] = "mimeType"; |
74 const char kTitle[] = "title"; | 78 const char kTitle[] = "title"; |
75 const char kModifiedByMeDate[] = "modifiedByMeDate"; | 79 const char kModifiedByMeDate[] = "modifiedByMeDate"; |
| 80 const char kParents[] = "parents"; |
76 const char kDownloadUrl[] = "downloadUrl"; | 81 const char kDownloadUrl[] = "downloadUrl"; |
77 const char kFileExtension[] = "fileExtension"; | 82 const char kFileExtension[] = "fileExtension"; |
78 const char kMd5Checksum[] = "md5Checksum"; | 83 const char kMd5Checksum[] = "md5Checksum"; |
79 const char kFileSize[] = "fileSize"; | 84 const char kFileSize[] = "fileSize"; |
80 | 85 |
81 const char kDriveFolderMimeType[] = "application/vnd.google-apps.folder"; | 86 const char kDriveFolderMimeType[] = "application/vnd.google-apps.folder"; |
82 | 87 |
83 // Files List: | 88 // Files List: |
84 const char kFileListKind[] = "drive#fileList"; | 89 const char kFileListKind[] = "drive#fileList"; |
85 const char kNextPageToken[] = "nextPageToken"; | 90 const char kNextPageToken[] = "nextPageToken"; |
86 const char kNextLink[] = "nextLink"; | 91 const char kNextLink[] = "nextLink"; |
87 | 92 |
| 93 // Change Resource: |
| 94 const char kChangeKind[] = "drive#change"; |
| 95 const char kFileId[] = "fileId"; |
| 96 const char kFile[] = "file"; |
| 97 |
| 98 // Changes List: |
| 99 const char kChangeListKind[] = "drive#changeList"; |
| 100 |
88 // Maps category name to enum IconCategory. | 101 // Maps category name to enum IconCategory. |
89 struct AppIconCategoryMap { | 102 struct AppIconCategoryMap { |
90 gdata::DriveAppIcon::IconCategory category; | 103 gdata::DriveAppIcon::IconCategory category; |
91 const char* category_name; | 104 const char* category_name; |
92 }; | 105 }; |
93 | 106 |
94 const AppIconCategoryMap kAppIconCategoryMap[] = { | 107 const AppIconCategoryMap kAppIconCategoryMap[] = { |
95 { gdata::DriveAppIcon::DOCUMENT, "document" }, | 108 { gdata::DriveAppIcon::DOCUMENT, "document" }, |
96 { gdata::DriveAppIcon::APPLICATION, "application" }, | 109 { gdata::DriveAppIcon::APPLICATION, "application" }, |
97 { gdata::DriveAppIcon::SHARED_DOCUMENT, "documentShared" }, | 110 { gdata::DriveAppIcon::SHARED_DOCUMENT, "documentShared" }, |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 bool AppList::Parse(const base::Value& value) { | 302 bool AppList::Parse(const base::Value& value) { |
290 base::JSONValueConverter<AppList> converter; | 303 base::JSONValueConverter<AppList> converter; |
291 if (!converter.Convert(value, this)) { | 304 if (!converter.Convert(value, this)) { |
292 LOG(ERROR) << "Unable to parse: Invalid AppList"; | 305 LOG(ERROR) << "Unable to parse: Invalid AppList"; |
293 return false; | 306 return false; |
294 } | 307 } |
295 return true; | 308 return true; |
296 } | 309 } |
297 | 310 |
298 //////////////////////////////////////////////////////////////////////////////// | 311 //////////////////////////////////////////////////////////////////////////////// |
| 312 // ParentReference implementation |
| 313 |
| 314 ParentReference::ParentReference() : is_root_(false) {} |
| 315 |
| 316 ParentReference::~ParentReference() {} |
| 317 |
| 318 // static |
| 319 void ParentReference::RegisterJSONConverter( |
| 320 base::JSONValueConverter<ParentReference>* converter) { |
| 321 converter->RegisterStringField(kId, &ParentReference::file_id_); |
| 322 converter->RegisterBoolField(kIsRoot, &ParentReference::is_root_); |
| 323 } |
| 324 |
| 325 // static |
| 326 scoped_ptr<ParentReference> |
| 327 ParentReference::CreateFrom(const base::Value& value) { |
| 328 scoped_ptr<ParentReference> reference(new ParentReference()); |
| 329 if (!IsResourceKindExpected(value, kParentReferenceKind) || |
| 330 !reference->Parse(value)) { |
| 331 LOG(ERROR) << "Unable to create: Invalid ParentRefernce JSON!"; |
| 332 return scoped_ptr<ParentReference>(NULL); |
| 333 } |
| 334 return reference.Pass(); |
| 335 } |
| 336 |
| 337 bool ParentReference::Parse(const base::Value& value) { |
| 338 base::JSONValueConverter<ParentReference> converter; |
| 339 if (!converter.Convert(value, this)) { |
| 340 LOG(ERROR) << "Unable to parse: Invalid ParentReference"; |
| 341 return false; |
| 342 } |
| 343 return true; |
| 344 } |
| 345 |
| 346 //////////////////////////////////////////////////////////////////////////////// |
299 // FileResource implementation | 347 // FileResource implementation |
300 | 348 |
301 FileResource::FileResource() : file_size_(0) {} | 349 FileResource::FileResource() : file_size_(0) {} |
302 | 350 |
303 FileResource::~FileResource() {} | 351 FileResource::~FileResource() {} |
304 | 352 |
305 // static | 353 // static |
306 void FileResource::RegisterJSONConverter( | 354 void FileResource::RegisterJSONConverter( |
307 base::JSONValueConverter<FileResource>* converter) { | 355 base::JSONValueConverter<FileResource>* converter) { |
308 converter->RegisterStringField(kId, &FileResource::file_id_); | 356 converter->RegisterStringField(kId, &FileResource::file_id_); |
309 converter->RegisterStringField(kETag, &FileResource::etag_); | 357 converter->RegisterStringField(kETag, &FileResource::etag_); |
310 converter->RegisterStringField(kMimeType, &FileResource::mime_type_); | 358 converter->RegisterStringField(kMimeType, &FileResource::mime_type_); |
311 converter->RegisterStringField(kTitle, &FileResource::title_); | 359 converter->RegisterStringField(kTitle, &FileResource::title_); |
312 converter->RegisterCustomField<base::Time>( | 360 converter->RegisterCustomField<base::Time>( |
313 kModifiedByMeDate, | 361 kModifiedByMeDate, |
314 &FileResource::modified_by_me_date_, | 362 &FileResource::modified_by_me_date_, |
315 &gdata::util::GetTimeFromString); | 363 &gdata::util::GetTimeFromString); |
| 364 converter->RegisterRepeatedMessage<ParentReference>(kParents, |
| 365 &FileResource::parents_); |
316 converter->RegisterCustomField<GURL>(kDownloadUrl, | 366 converter->RegisterCustomField<GURL>(kDownloadUrl, |
317 &FileResource::download_url_, | 367 &FileResource::download_url_, |
318 GetGURLFromString); | 368 GetGURLFromString); |
319 converter->RegisterStringField(kFileExtension, | 369 converter->RegisterStringField(kFileExtension, |
320 &FileResource::file_extension_); | 370 &FileResource::file_extension_); |
321 converter->RegisterStringField(kMd5Checksum, &FileResource::md5_checksum_); | 371 converter->RegisterStringField(kMd5Checksum, &FileResource::md5_checksum_); |
322 converter->RegisterCustomField<int64>(kFileSize, | 372 converter->RegisterCustomField<int64>(kFileSize, |
323 &FileResource::file_size_, | 373 &FileResource::file_size_, |
324 &base::StringToInt64); | 374 &base::StringToInt64); |
325 } | 375 } |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 | 429 |
380 bool FileList::Parse(const base::Value& value) { | 430 bool FileList::Parse(const base::Value& value) { |
381 base::JSONValueConverter<FileList> converter; | 431 base::JSONValueConverter<FileList> converter; |
382 if (!converter.Convert(value, this)) { | 432 if (!converter.Convert(value, this)) { |
383 LOG(ERROR) << "Unable to parse: Invalid FileList"; | 433 LOG(ERROR) << "Unable to parse: Invalid FileList"; |
384 return false; | 434 return false; |
385 } | 435 } |
386 return true; | 436 return true; |
387 } | 437 } |
388 | 438 |
| 439 //////////////////////////////////////////////////////////////////////////////// |
| 440 // ChangeResource implementation |
| 441 |
| 442 ChangeResource::ChangeResource() {} |
| 443 |
| 444 ChangeResource::~ChangeResource() {} |
| 445 |
| 446 // static |
| 447 void ChangeResource::RegisterJSONConverter( |
| 448 base::JSONValueConverter<ChangeResource>* converter) { |
| 449 converter->RegisterCustomField<int64>(kId, |
| 450 &ChangeResource::change_id_, |
| 451 &base::StringToInt64); |
| 452 converter->RegisterStringField(kFileId, &ChangeResource::file_id_); |
| 453 converter->RegisterNestedField(kFile, &ChangeResource::file_); |
| 454 } |
| 455 |
| 456 // static |
| 457 scoped_ptr<ChangeResource> ChangeResource::CreateFrom(const base::Value& value)
{ |
| 458 scoped_ptr<ChangeResource> resource(new ChangeResource()); |
| 459 if (!IsResourceKindExpected(value, kChangeKind) || !resource->Parse(value)) { |
| 460 LOG(ERROR) << "Unable to create: Invalid ChangeResource JSON!"; |
| 461 return scoped_ptr<ChangeResource>(NULL); |
| 462 } |
| 463 return resource.Pass(); |
| 464 } |
| 465 |
| 466 bool ChangeResource::Parse(const base::Value& value) { |
| 467 base::JSONValueConverter<ChangeResource> converter; |
| 468 if (!converter.Convert(value, this)) { |
| 469 LOG(ERROR) << "Unable to parse: Invalid ChangeResource"; |
| 470 return false; |
| 471 } |
| 472 return true; |
| 473 } |
| 474 |
| 475 //////////////////////////////////////////////////////////////////////////////// |
| 476 // ChangeList implementation |
| 477 |
| 478 ChangeList::ChangeList() : largest_change_id_(0) {} |
| 479 |
| 480 ChangeList::~ChangeList() {} |
| 481 |
| 482 // static |
| 483 void ChangeList::RegisterJSONConverter( |
| 484 base::JSONValueConverter<ChangeList>* converter) { |
| 485 converter->RegisterStringField(kETag, &ChangeList::etag_); |
| 486 converter->RegisterStringField(kNextPageToken, &ChangeList::next_page_token_); |
| 487 converter->RegisterCustomField<GURL>(kNextLink, |
| 488 &ChangeList::next_link_, |
| 489 GetGURLFromString); |
| 490 converter->RegisterCustomField<int64>(kLargestChangeId, |
| 491 &ChangeList::largest_change_id_, |
| 492 &base::StringToInt64); |
| 493 converter->RegisterRepeatedMessage<ChangeResource>(kItems, |
| 494 &ChangeList::items_); |
| 495 } |
| 496 |
| 497 // static |
| 498 scoped_ptr<ChangeList> ChangeList::CreateFrom(const base::Value& value) { |
| 499 scoped_ptr<ChangeList> resource(new ChangeList()); |
| 500 if (!IsResourceKindExpected(value, kChangeListKind) || |
| 501 !resource->Parse(value)) { |
| 502 LOG(ERROR) << "Unable to create: Invalid ChangeList JSON!"; |
| 503 return scoped_ptr<ChangeList>(NULL); |
| 504 } |
| 505 return resource.Pass(); |
| 506 } |
| 507 |
| 508 bool ChangeList::Parse(const base::Value& value) { |
| 509 base::JSONValueConverter<ChangeList> converter; |
| 510 if (!converter.Convert(value, this)) { |
| 511 LOG(ERROR) << "Unable to parse: Invalid ChangeList"; |
| 512 return false; |
| 513 } |
| 514 return true; |
| 515 } |
| 516 |
389 } // namespace gdata | 517 } // namespace gdata |
OLD | NEW |