// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SYNC_ENGINE_NON_BLOCKING_TYPE_COMMIT_CONTRIBUTION_H_
#define SYNC_ENGINE_NON_BLOCKING_TYPE_COMMIT_CONTRIBUTION_H_

#include <vector>

#include "base/basictypes.h"
#include "sync/engine/commit_contribution.h"
#include "sync/protocol/sync.pb.h"

namespace syncer {

class NonBlockingTypeProcessorCore;

// A non-blocking sync type's contribution to an outgoing commit message.
//
// Helps build a commit message and process its response.  It collaborates
// closely with the NonBlockingTypeProcessorCore.
class NonBlockingTypeCommitContribution : public CommitContribution {
 public:
  NonBlockingTypeCommitContribution(
      const sync_pb::DataTypeContext& context,
      const google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>& entities,
      const std::vector<int64>& sequence_numbers,
      NonBlockingTypeProcessorCore* processor_core);
  virtual ~NonBlockingTypeCommitContribution();

  // Implementation of CommitContribution
  virtual void AddToCommitMessage(sync_pb::ClientToServerMessage* msg) OVERRIDE;
  virtual SyncerError ProcessCommitResponse(
      const sync_pb::ClientToServerResponse& response,
      sessions::StatusController* status) OVERRIDE;
  virtual void CleanUp() OVERRIDE;
  virtual size_t GetNumEntries() const OVERRIDE;

 private:
  // A non-owned pointer back to the object that created this contribution.
  NonBlockingTypeProcessorCore* const processor_core_;

  // The type-global context information.
  const sync_pb::DataTypeContext context_;

  // The set of entities to be committed, serialized as SyncEntities.
  const google::protobuf::RepeatedPtrField<sync_pb::SyncEntity> entities_;

  // The sequence numbers associated with the pending commits.  These match up
  // with the entities_ vector.
  const std::vector<int64> sequence_numbers_;

  // The index in the commit message where this contribution's entities are
  // added.  Used to correlate per-item requests with per-item responses.
  size_t entries_start_index_;

  // A flag used to ensure this object's contract is respected.  Helps to check
  // that CleanUp() is called before the object is destructed.
  bool cleaned_up_;

  DISALLOW_COPY_AND_ASSIGN(NonBlockingTypeCommitContribution);
};

}  // namespace syncer

#endif  // SYNC_ENGINE_NON_BLOCKING_TYPE_COMMIT_CONTRIBUTION_H_
