1 // Copyright 2012 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 SYNC_INTERNAL_API_PUBLIC_READ_NODE_H_ 6 #define SYNC_INTERNAL_API_PUBLIC_READ_NODE_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/compiler_specific.h" 12 #include "sync/base/sync_export.h" 13 #include "sync/internal_api/public/base/model_type.h" 14 #include "sync/internal_api/public/base_node.h" 15 16 namespace syncer { 17 18 // ReadNode wraps a syncable::Entry to provide the functionality of a 19 // read-only BaseNode. 20 class SYNC_EXPORT ReadNode : public BaseNode { 21 public: 22 // Create an unpopulated ReadNode on the given transaction. Call some flavor 23 // of Init to populate the ReadNode with a database entry. 24 explicit ReadNode(const BaseTransaction* transaction); 25 virtual ~ReadNode(); 26 27 // A client must use one (and only one) of the following Init variants to 28 // populate the node. 29 30 // BaseNode implementation. 31 virtual InitByLookupResult InitByIdLookup(int64 id) OVERRIDE; 32 virtual InitByLookupResult InitByClientTagLookup( 33 ModelType model_type, 34 const std::string& tag) OVERRIDE; 35 36 // There is always a root node, so this can't fail. The root node is 37 // never mutable, so root lookup is only possible on a ReadNode. 38 void InitByRootLookup(); 39 40 // Each server-created permanent node is tagged with a unique string. 41 // Look up the node with the particular tag. If it does not exist, 42 // return false. 43 InitByLookupResult InitByTagLookup(const std::string& tag); 44 45 // Implementation of BaseNode's abstract virtual accessors. 46 virtual const syncable::Entry* GetEntry() const OVERRIDE; 47 virtual const BaseTransaction* GetTransaction() const OVERRIDE; 48 49 protected: 50 ReadNode(); 51 52 private: 53 void* operator new(size_t size); // Node is meant for stack use only. 54 55 // The underlying syncable object which this class wraps. 56 syncable::Entry* entry_; 57 58 // The sync API transaction that is the parent of this node. 59 const BaseTransaction* transaction_; 60 61 DISALLOW_COPY_AND_ASSIGN(ReadNode); 62 }; 63 64 } // namespace syncer 65 66 #endif // SYNC_INTERNAL_API_PUBLIC_READ_NODE_H_ 67