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_BASE_TRANSACTION_H_
6#define SYNC_INTERNAL_API_PUBLIC_BASE_TRANSACTION_H_
7
8#include "sync/base/sync_export.h"
9#include "sync/internal_api/public/base/model_type.h"
10#include "sync/internal_api/public/user_share.h"
11#include "sync/util/cryptographer.h"
12
13namespace syncer {
14
15namespace syncable {
16class BaseTransaction;
17class Directory;
18}
19
20// Sync API's BaseTransaction, ReadTransaction, and WriteTransaction allow for
21// batching of several read and/or write operations.  The read and write
22// operations are performed by creating ReadNode and WriteNode instances using
23// the transaction. These transaction classes wrap identically named classes in
24// syncable, and are used in a similar way. Unlike syncable::BaseTransaction,
25// whose construction requires an explicit syncable::Directory, a sync
26// API BaseTransaction is created from a UserShare object.
27//
28// Note, these transactions are not atomic. Individual operations can
29// fail. There is no built-in rollback or undo mechanism.
30class SYNC_EXPORT BaseTransaction {
31 public:
32  // Provide access to the underlying syncable objects from BaseNode.
33  virtual syncable::BaseTransaction* GetWrappedTrans() const = 0;
34  Cryptographer* GetCryptographer() const;
35  ModelTypeSet GetEncryptedTypes() const;
36
37  syncable::Directory* GetDirectory() const {
38    if (!user_share_) {
39      return NULL;
40    } else {
41      return user_share_->directory.get();
42    }
43  }
44
45  UserShare* GetUserShare() const {
46    return user_share_;
47  }
48
49 protected:
50  explicit BaseTransaction(UserShare* share);
51  virtual ~BaseTransaction();
52
53  BaseTransaction() : user_share_(NULL) { }
54
55 private:
56  UserShare* user_share_;
57
58  DISALLOW_COPY_AND_ASSIGN(BaseTransaction);
59};
60
61}  // namespace syncer
62
63#endif  // SYNC_INTERNAL_API_PUBLIC_BASE_TRANSACTION_H_
64