Commit a8d9f4f5 authored by kochi@chromium.org's avatar kochi@chromium.org

Parse labels under File resource.

The labels include starred, trashed, hidden, restricted, viewed.

BUG=chromium:127728
TEST=unit_tests --gtest_filter="DriveAPI*"

Review URL: https://chromiumcodereview.appspot.com/10836205

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151427 0039d316-1c4b-4281-b951-d872f2087c98
parent 2ba73e87
...@@ -98,6 +98,13 @@ const char kEmbedLink[] = "embedLink"; ...@@ -98,6 +98,13 @@ const char kEmbedLink[] = "embedLink";
const char kParents[] = "parents"; const char kParents[] = "parents";
const char kThumbnailLink[] = "thumbnailLink"; const char kThumbnailLink[] = "thumbnailLink";
const char kWebContentLink[] = "webContentLink"; const char kWebContentLink[] = "webContentLink";
const char kLabels[] = "labels";
// These 5 flags are defined under |labels|.
const char kLabelStarred[] = "starred";
const char kLabelHidden[] = "hidden";
const char kLabelTrashed[] = "trashed";
const char kLabelRestricted[] = "restricted";
const char kLabelViewed[] = "viewed";
const char kDriveFolderMimeType[] = "application/vnd.google-apps.folder"; const char kDriveFolderMimeType[] = "application/vnd.google-apps.folder";
...@@ -395,6 +402,7 @@ void FileResource::RegisterJSONConverter( ...@@ -395,6 +402,7 @@ void FileResource::RegisterJSONConverter(
GetGURLFromString); GetGURLFromString);
converter->RegisterStringField(kTitle, &FileResource::title_); converter->RegisterStringField(kTitle, &FileResource::title_);
converter->RegisterStringField(kMimeType, &FileResource::mime_type_); converter->RegisterStringField(kMimeType, &FileResource::mime_type_);
converter->RegisterNestedField(kLabels, &FileResource::labels_);
converter->RegisterCustomField<base::Time>( converter->RegisterCustomField<base::Time>(
kCreatedDate, kCreatedDate,
&FileResource::created_date_, &FileResource::created_date_,
...@@ -588,4 +596,46 @@ bool ChangeList::Parse(const base::Value& value) { ...@@ -588,4 +596,46 @@ bool ChangeList::Parse(const base::Value& value) {
return true; return true;
} }
////////////////////////////////////////////////////////////////////////////////
// FileLabels implementation
FileLabels::FileLabels()
: starred_(false),
hidden_(false),
trashed_(false),
restricted_(false),
viewed_(false) {}
FileLabels::~FileLabels() {}
// static
void FileLabels::RegisterJSONConverter(
base::JSONValueConverter<FileLabels>* converter) {
converter->RegisterBoolField(kLabelStarred, &FileLabels::starred_);
converter->RegisterBoolField(kLabelHidden, &FileLabels::hidden_);
converter->RegisterBoolField(kLabelTrashed, &FileLabels::trashed_);
converter->RegisterBoolField(kLabelRestricted, &FileLabels::restricted_);
converter->RegisterBoolField(kLabelViewed, &FileLabels::viewed_);
}
// static
scoped_ptr<FileLabels> FileLabels::CreateFrom(const base::Value& value) {
scoped_ptr<FileLabels> resource(new FileLabels());
if (!resource->Parse(value)) {
LOG(ERROR) << "Unable to create: Invalid FileLabels JSON!";
return scoped_ptr<FileLabels>(NULL);
}
return resource.Pass();
}
bool FileLabels::Parse(const base::Value& value) {
base::JSONValueConverter<FileLabels> converter;
if (!converter.Convert(value, this)) {
LOG(ERROR) << "Unable to parse: Invalid FileLabels";
return false;
}
return true;
}
} // namespace gdata } // namespace gdata
...@@ -299,6 +299,49 @@ class ParentReference { ...@@ -299,6 +299,49 @@ class ParentReference {
DISALLOW_COPY_AND_ASSIGN(ParentReference); DISALLOW_COPY_AND_ASSIGN(ParentReference);
}; };
// FileLabels represents labels for file or folder.
// https://developers.google.com/drive/v2/reference/files
class FileLabels {
public:
~FileLabels();
// Registers the mapping between JSON field names and the members in this
// class.
static void RegisterJSONConverter(
base::JSONValueConverter<FileLabels>* converter);
// Creates about resource from parsed JSON.
static scoped_ptr<FileLabels> CreateFrom(const base::Value& value);
// Whether this file is starred by the user.
bool is_starred() const { return starred_; }
// Whether this file is hidden from the user.
bool is_hidden() const { return hidden_; }
// Whether this file has been trashed.
bool is_trashed() const { return trashed_; }
// Whether viewers are prevented from downloading this file.
bool is_restricted() const { return restricted_; }
// Whether this file has been viewed by this user.
bool is_viewed() const { return viewed_; }
private:
friend class FileResource;
FileLabels();
// Parses and initializes data members from content of |value|.
// Return false if parsing fails.
bool Parse(const base::Value& value);
bool starred_;
bool hidden_;
bool trashed_;
bool restricted_;
bool viewed_;
DISALLOW_COPY_AND_ASSIGN(FileLabels);
};
// FileResource represents a file or folder metadata in Drive. // FileResource represents a file or folder metadata in Drive.
// https://developers.google.com/drive/v2/reference/files // https://developers.google.com/drive/v2/reference/files
class FileResource { class FileResource {
...@@ -338,6 +381,9 @@ class FileResource { ...@@ -338,6 +381,9 @@ class FileResource {
// Returns MIME type of this file. // Returns MIME type of this file.
const std::string& mime_type() const { return mime_type_; } const std::string& mime_type() const { return mime_type_; }
// Returns labels for this file.
const FileLabels& labels() const { return labels_; }
// Returns created time of this file. // Returns created time of this file.
const base::Time& created_date() const { return created_date_; } const base::Time& created_date() const { return created_date_; }
...@@ -389,6 +435,7 @@ class FileResource { ...@@ -389,6 +435,7 @@ class FileResource {
GURL self_link_; GURL self_link_;
std::string title_; std::string title_;
std::string mime_type_; std::string mime_type_;
FileLabels labels_;
base::Time created_date_; base::Time created_date_;
base::Time modified_by_me_date_; base::Time modified_by_me_date_;
GURL download_url_; GURL download_url_;
......
...@@ -170,6 +170,12 @@ TEST_F(DriveAPIParserTest, FileListParser) { ...@@ -170,6 +170,12 @@ TEST_F(DriveAPIParserTest, FileListParser) {
EXPECT_EQ("My first file data", file1.title()); EXPECT_EQ("My first file data", file1.title());
EXPECT_EQ("application/octet-stream", file1.mime_type()); EXPECT_EQ("application/octet-stream", file1.mime_type());
EXPECT_FALSE(file1.labels().is_starred());
EXPECT_FALSE(file1.labels().is_hidden());
EXPECT_FALSE(file1.labels().is_trashed());
EXPECT_FALSE(file1.labels().is_restricted());
EXPECT_TRUE(file1.labels().is_viewed());
base::Time created_time; base::Time created_time;
ASSERT_TRUE(gdata::util::GetTimeFromString("2012-07-24T08:51:16.570Z", ASSERT_TRUE(gdata::util::GetTimeFromString("2012-07-24T08:51:16.570Z",
&created_time)); &created_time));
...@@ -206,6 +212,13 @@ TEST_F(DriveAPIParserTest, FileListParser) { ...@@ -206,6 +212,13 @@ TEST_F(DriveAPIParserTest, FileListParser) {
const FileResource& file2 = *filelist->items()[1]; const FileResource& file2 = *filelist->items()[1];
EXPECT_EQ("Test Google Document", file2.title()); EXPECT_EQ("Test Google Document", file2.title());
EXPECT_EQ("application/vnd.google-apps.document", file2.mime_type()); EXPECT_EQ("application/vnd.google-apps.document", file2.mime_type());
EXPECT_TRUE(file2.labels().is_starred());
EXPECT_TRUE(file2.labels().is_hidden());
EXPECT_TRUE(file2.labels().is_trashed());
EXPECT_TRUE(file2.labels().is_restricted());
EXPECT_TRUE(file2.labels().is_viewed());
EXPECT_EQ(0U, file2.file_size()); EXPECT_EQ(0U, file2.file_size());
ASSERT_EQ(0U, file2.parents().size()); ASSERT_EQ(0U, file2.parents().size());
......
...@@ -66,9 +66,9 @@ ...@@ -66,9 +66,9 @@
"mimeType": "application/vnd.google-apps.document", "mimeType": "application/vnd.google-apps.document",
"labels": { "labels": {
"starred": true, "starred": true,
"hidden": false, "hidden": true,
"trashed": false, "trashed": true,
"restricted": false, "restricted": true,
"viewed": true "viewed": true
}, },
"createdDate": "2012-07-27T04:54:09.686Z", "createdDate": "2012-07-27T04:54:09.686Z",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment