Home | History | Annotate | Download | only in syncable
      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_SYNCABLE_MUTABLE_ENTRY_H_
      6 #define SYNC_SYNCABLE_MUTABLE_ENTRY_H_
      7 
      8 #include "sync/base/sync_export.h"
      9 #include "sync/internal_api/public/base/model_type.h"
     10 #include "sync/syncable/entry.h"
     11 #include "sync/syncable/metahandle_set.h"
     12 #include "sync/syncable/model_neutral_mutable_entry.h"
     13 
     14 namespace syncer {
     15 class WriteNode;
     16 
     17 namespace syncable {
     18 
     19 enum Create {
     20   CREATE
     21 };
     22 
     23 class WriteTransaction;
     24 
     25 // A mutable meta entry.  Changes get committed to the database when the
     26 // WriteTransaction is destroyed.
     27 class SYNC_EXPORT_PRIVATE MutableEntry : public ModelNeutralMutableEntry {
     28   void Init(WriteTransaction* trans, ModelType model_type,
     29             const Id& parent_id, const std::string& name);
     30 
     31  public:
     32   MutableEntry(WriteTransaction* trans, CreateNewUpdateItem, const Id& id);
     33   MutableEntry(WriteTransaction* trans, Create, ModelType model_type,
     34                const Id& parent_id, const std::string& name);
     35   MutableEntry(WriteTransaction* trans, GetByHandle, int64);
     36   MutableEntry(WriteTransaction* trans, GetById, const Id&);
     37   MutableEntry(WriteTransaction* trans, GetByClientTag, const std::string& tag);
     38   MutableEntry(WriteTransaction* trans, GetTypeRoot, ModelType type);
     39 
     40   inline WriteTransaction* write_transaction() const {
     41     return write_transaction_;
     42   }
     43 
     44   // Model-changing setters.  These setters make user-visible changes that will
     45   // need to be communicated either to the local model or the sync server.
     46   void PutLocalExternalId(int64 value);
     47   void PutMtime(base::Time value);
     48   void PutCtime(base::Time value);
     49   void PutParentId(const Id& value);
     50   void PutIsDir(bool value);
     51   void PutIsDel(bool value);
     52   void PutNonUniqueName(const std::string& value);
     53   void PutSpecifics(const sync_pb::EntitySpecifics& value);
     54   void PutUniquePosition(const UniquePosition& value);
     55 
     56   // Sets the position of this item, and updates the entry kernels of the
     57   // adjacent siblings so that list invariants are maintained.  Returns false
     58   // and fails if |predecessor_id| does not identify a sibling.  Pass the root
     59   // ID to put the node in first position.
     60   bool PutPredecessor(const Id& predecessor_id);
     61 
     62   void PutAttachmentMetadata(
     63       const sync_pb::AttachmentMetadata& attachment_metadata);
     64 
     65   // Update attachment metadata for |attachment_id| to indicate that this
     66   // attachment has been uploaded to the sync server.
     67   void MarkAttachmentAsOnServer(
     68       const sync_pb::AttachmentIdProto& attachment_id);
     69 
     70  private:
     71   // Kind of redundant. We should reduce the number of pointers
     72   // floating around if at all possible. Could we store this in Directory?
     73   // Scope: Set on construction, never changed after that.
     74   WriteTransaction* const write_transaction_;
     75 
     76   DISALLOW_COPY_AND_ASSIGN(MutableEntry);
     77 };
     78 
     79 // This function sets only the flags needed to get this entry to sync.
     80 bool MarkForSyncing(syncable::MutableEntry* e);
     81 
     82 }  // namespace syncable
     83 }  // namespace syncer
     84 
     85 #endif  // SYNC_SYNCABLE_MUTABLE_ENTRY_H_
     86