drive_backend_util.h revision 116680a4aac90f2aa7413d9095a592090648e557
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_BACKEND_UTIL_H_ 6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_BACKEND_UTIL_H_ 7 8#include <string> 9 10#include "base/bind.h" 11#include "base/callback.h" 12#include "base/memory/scoped_ptr.h" 13#include "base/memory/scoped_vector.h" 14#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 15#include "chrome/browser/sync_file_system/sync_status_code.h" 16#include "google_apis/drive/gdata_errorcode.h" 17#include "webkit/common/blob/scoped_file.h" 18 19namespace google_apis { 20class ChangeResource; 21class FileResource; 22class ResourceEntry; 23} 24 25namespace leveldb { 26class DB; 27class WriteBatch; 28} 29 30namespace sync_file_system { 31namespace drive_backend { 32 33void PutVersionToBatch(int64 version, leveldb::WriteBatch* batch); 34 35void PutServiceMetadataToBatch(const ServiceMetadata& service_metadata, 36 leveldb::WriteBatch* batch); 37void PutFileMetadataToBatch(const FileMetadata& file, 38 leveldb::WriteBatch* batch); 39void PutFileTrackerToBatch(const FileTracker& tracker, 40 leveldb::WriteBatch* batch); 41 42void PutFileMetadataDeletionToBatch(const std::string& file_id, 43 leveldb::WriteBatch* batch); 44void PutFileTrackerDeletionToBatch(int64 tracker_id, 45 leveldb::WriteBatch* batch); 46 47bool HasFileAsParent(const FileDetails& details, const std::string& file_id); 48 49bool IsAppRoot(const FileTracker& tracker); 50 51std::string GetTrackerTitle(const FileTracker& tracker); 52 53SyncStatusCode GDataErrorCodeToSyncStatusCode( 54 google_apis::GDataErrorCode error); 55 56// Returns true if |str| starts with |prefix|, and removes |prefix| from |str|. 57// If |out| is not NULL, the result is stored in it. 58bool RemovePrefix(const std::string& str, const std::string& prefix, 59 std::string* out); 60 61scoped_ptr<ServiceMetadata> InitializeServiceMetadata(leveldb::DB* db); 62 63template <typename Src, typename Dest> 64void AppendContents(const Src& src, Dest* dest) { 65 dest->insert(dest->end(), src.begin(), src.end()); 66} 67 68template <typename Container> 69const typename Container::mapped_type& LookUpMap( 70 const Container& container, 71 const typename Container::key_type& key, 72 const typename Container::mapped_type& default_value) { 73 typename Container::const_iterator found = container.find(key); 74 if (found == container.end()) 75 return default_value; 76 return found->second; 77} 78 79template <typename R, typename S, typename T> 80R ComposeFunction(const base::Callback<T()>& g, 81 const base::Callback<R(S)>& f) { 82 return f.Run(g.Run()); 83} 84 85template <typename R, typename S, typename T> 86base::Callback<R()> CreateComposedFunction( 87 const base::Callback<T()>& g, 88 const base::Callback<R(S)>& f) { 89 return base::Bind(&ComposeFunction<R, S, T>, g, f); 90} 91 92} // namespace drive_backend 93} // namespace sync_file_system 94 95#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_BACKEND_UTIL_H_ 96