Home | History | Annotate | Download | only in public
      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