12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_DRIVE_RESOURCE_ENTRY_CONVERSION_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_DRIVE_RESOURCE_ENTRY_CONVERSION_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include <string>
9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/files/file.h"
11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace google_apis {
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ChangeResource;
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class FileResource;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace drive {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ResourceEntry;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Converts a google_apis::ChangeResource into a drive::ResourceEntry.
22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// If the conversion succeeded, return true and sets the result to |out_entry|.
23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// |out_parent_resource_id| will be set to the resource ID of the parent entry.
24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// If failed, it returns false and keeps output arguments untouched.
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)//
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Every entry is guaranteed to have one parent resource ID in ResourceMetadata.
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// This requirement is needed to represent contents in Drive as a file system
283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// tree, and achieved as follows:
293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)//
303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 1) Entries without parents are allowed on drive.google.com. These entries are
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// collected to "drive/other", and have "drive/other" as the parent.
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)//
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 2) Entries with multiple parents are allowed on drive.google.com. For these
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// entries, the first parent is chosen.
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool ConvertChangeResourceToResourceEntry(
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    const google_apis::ChangeResource& input,
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    ResourceEntry* out_entry,
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string* out_parent_resource_id);
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Converts a google_apis::FileResource into a drive::ResourceEntry.
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Also see the comment for ConvertChangeResourceToResourceEntry above.
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool ConvertFileResourceToResourceEntry(
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    const google_apis::FileResource& input,
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    ResourceEntry* out_entry,
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::string* out_parent_resource_id);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Converts the resource entry to the platform file info.
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ConvertResourceEntryToFileInfo(const ResourceEntry& entry,
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    base::File::Info* file_info);
50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace drive
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_DRIVE_RESOURCE_ENTRY_CONVERSION_H_
54