12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef SYNC_API_SYNC_MERGE_RESULT_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SYNC_API_SYNC_MERGE_RESULT_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/api/sync_error.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/base/sync_export.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/internal_api/public/base/model_type.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace syncer {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A model-type-specific view of a sync merge. This class encapsulates the
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// state before and after the merge as well as the deltas and any error that
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// occurred.
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Note: This class only tracks one side of the merge. In other words, if built
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// by the local SyncableService, all values correspond to the local state before
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// and after merging, and the delta's applied to that state. Sync's change
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// processor will create a separate merge result.
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SYNC_EXPORT SyncMergeResult {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Initialize an empty merge result for model type |type|.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit SyncMergeResult(ModelType type);
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~SyncMergeResult();
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Default copy and assign welcome.
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Setters.
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note: if |error.IsSet()| is true, |error.type()| must match model_type_
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_error(SyncError error);
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_num_items_before_association(int num_items_before_association);
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_num_items_after_association(int num_items_after_association);
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_num_items_added(int num_items_added);
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_num_items_deleted(int num_items_deleted);
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_num_items_modified(int num_items_modified);
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void set_pre_association_version(int64 version);
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Getters.
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ModelType model_type() const;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncError error() const;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_items_before_association() const;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_items_after_association() const;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_items_added() const;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_items_deleted() const;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_items_modified() const;
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  int64 pre_association_version() const;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Make |this| into a copy of |other|.
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CopyFrom(const SyncMergeResult& other);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The datatype that was associated.
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ModelType model_type_;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The error encountered during association. Unset if no error was
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // encountered.
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncError error_;
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The state of the world before association.
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_items_before_association_;
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The state of the world after association.
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_items_after_association_;
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The changes that took place during association. In a correctly working
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // system these should be the deltas between before and after.
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_items_added_;
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_items_deleted_;
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_items_modified_;
717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Version of model before association.
737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  int64 pre_association_version_;
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace syncer
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // SYNC_API_SYNC_MERGE_RESULT_H_
79