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