| Index: chrome/browser/sync/glue/model_associator.h
 | 
| ===================================================================
 | 
| --- chrome/browser/sync/glue/model_associator.h	(revision 0)
 | 
| +++ chrome/browser/sync/glue/model_associator.h	(revision 0)
 | 
| @@ -0,0 +1,141 @@
 | 
| +// Copyright (c) 2006-2009 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.
 | 
| +
 | 
| +#ifdef CHROME_PERSONALIZATION
 | 
| +
 | 
| +#ifndef CHROME_BROWSER_SYNC_GLUE_MODEL_ASSOCATOR_H_
 | 
| +#define CHROME_BROWSER_SYNC_GLUE_MODEL_ASSOCATOR_H_
 | 
| +
 | 
| +#include <map>
 | 
| +#include <set>
 | 
| +#include <string>
 | 
| +
 | 
| +#include "base/basictypes.h"
 | 
| +#include "base/ref_counted.h"
 | 
| +#include "base/scoped_ptr.h"
 | 
| +#include "base/string16.h"
 | 
| +
 | 
| +class BookmarkNode;
 | 
| +
 | 
| +namespace sync_api {
 | 
| +class BaseNode;
 | 
| +class BaseTransaction;
 | 
| +class ReadNode;
 | 
| +}
 | 
| +
 | 
| +class ProfileSyncService;
 | 
| +
 | 
| +namespace browser_sync {
 | 
| +
 | 
| +// Contains all model assocation related logic:
 | 
| +// * Algorithm to associate bookmark model and sync model.
 | 
| +// * Methods to get a bookmark node for a given sync node and vice versa.
 | 
| +// * Persisting model assocations and loading them back.
 | 
| +class ModelAssociator
 | 
| +    : public base::RefCountedThreadSafe<ModelAssociator> {
 | 
| + public:
 | 
| +  explicit ModelAssociator(ProfileSyncService* sync_service);
 | 
| +  virtual ~ModelAssociator() { }
 | 
| +
 | 
| +  // Clears all assocations.
 | 
| +  void ClearAll();
 | 
| +
 | 
| +  // Returns sync id for the given bookmark node id.
 | 
| +  // Returns sync_api::kInvalidId if the sync node is not found for the given
 | 
| +  // bookmark node id.
 | 
| +  int64 GetSyncIdFromBookmarkId(int64 node_id) const;
 | 
| +
 | 
| +  // Stores bookmark node id for the given sync id in bookmark_id. Returns true
 | 
| +  // if the bookmark id was successfully found; false otherwise.
 | 
| +  bool GetBookmarkIdFromSyncId(int64 sync_id, int64* bookmark_id) const;
 | 
| +
 | 
| +  // Initializes the given sync node from the given bookmark node id.
 | 
| +  // Returns false if no sync node was found for the given bookmark node id or
 | 
| +  // if the initialization of sync node fails.
 | 
| +  bool InitSyncNodeFromBookmarkId(int64 node_id, sync_api::BaseNode* sync_node);
 | 
| +
 | 
| +  // Returns the bookmark node for the given sync id.
 | 
| +  // Returns NULL if no bookmark node is found for the given sync id.
 | 
| +  const BookmarkNode* GetBookmarkNodeFromSyncId(int64 sync_id);
 | 
| +
 | 
| +  // Associates the given bookmark node id with the given sync id.
 | 
| +  void AssociateIds(int64 node_id, int64 sync_id);
 | 
| +  // Disassociate the ids that correspond to the given sync id.
 | 
| +  void DisassociateIds(int64 sync_id);
 | 
| +
 | 
| +  // Returns whether the bookmark model has user created nodes or not. That is,
 | 
| +  // whether there are nodes in the bookmark model except the bookmark bar and
 | 
| +  // other bookmarks.
 | 
| +  bool BookmarkModelHasUserCreatedNodes() const;
 | 
| +
 | 
| +  // Returns whether the sync model has nodes other than the permanent tagged
 | 
| +  // nodes.
 | 
| +  bool SyncModelHasUserCreatedNodes();
 | 
| +
 | 
| +  // AssociateModels iterates through both the sync and the browser
 | 
| +  // bookmark model, looking for matched pairs of items.  For any pairs it
 | 
| +  // finds, it will call AssociateSyncID.  For any unmatched items,
 | 
| +  // MergeAndAssociateModels will try to repair the match, e.g. by adding a new
 | 
| +  // node.  After successful completion, the models should be identical and
 | 
| +  // corresponding. Returns true on success.  On failure of this step, we
 | 
| +  // should abort the sync operation and report an error to the user.
 | 
| +  bool AssociateModels();
 | 
| +
 | 
| + protected:
 | 
| +  // Stores the id of the node with the given tag in |sync_id|.
 | 
| +  // Returns of that node was found successfully.
 | 
| +  // Tests override this.
 | 
| +  virtual bool GetSyncIdForTaggedNode(const string16& tag, int64* sync_id);
 | 
| +
 | 
| +  // Returns sync service instance.
 | 
| +  ProfileSyncService* sync_service() { return sync_service_; }
 | 
| +
 | 
| + private:
 | 
| +  typedef std::map<int64, int64> BookmarkIdToSyncIdMap;
 | 
| +  typedef std::map<int64, int64> SyncIdToBookmarkIdMap;
 | 
| +  typedef std::set<int64> DirtyAssocationsSyncIds;
 | 
| +
 | 
| +  // Posts a task to persist dirty assocations.
 | 
| +  void PostPersistAssociationsTask();
 | 
| +  // Persists all dirty assocations.
 | 
| +  void PersistAssociations();
 | 
| +
 | 
| +  // Loads the persisted assocations into in-memory maps.
 | 
| +  // If the persisted associations are out-of-date due to some reason, returns
 | 
| +  // false; otehrwise returns true.
 | 
| +  bool LoadAssociations();
 | 
| +
 | 
| +  // Matches up the bookmark model and the sync model to build model
 | 
| +  // assocations.
 | 
| +  bool BuildAssocations();
 | 
| +
 | 
| +  // Associate a top-level node of the bookmark model with a permanent node in
 | 
| +  // the sync domain.  Such permanent nodes are identified by a tag that is
 | 
| +  // well known to the server and the client, and is unique within a particular
 | 
| +  // user's share.  For example, "other_bookmarks" is the tag for the Other
 | 
| +  // Bookmarks folder.  The sync nodes are server-created.
 | 
| +  bool AssociateTaggedPermanentNode(const BookmarkNode* permanent_node,
 | 
| +                                    const string16& tag);
 | 
| +
 | 
| +  // Compare the properties of a pair of nodes from either domain.
 | 
| +  bool NodesMatch(const BookmarkNode* bookmark,
 | 
| +                  const sync_api::BaseNode* sync_node) const;
 | 
| +
 | 
| +  ProfileSyncService* sync_service_;
 | 
| +  BookmarkIdToSyncIdMap id_map_;
 | 
| +  SyncIdToBookmarkIdMap id_map_inverse_;
 | 
| +  // Stores sync ids for dirty associations.
 | 
| +  DirtyAssocationsSyncIds dirty_assocations_sync_ids_;
 | 
| +
 | 
| +  // Indicates whether there is already a pending task to persist dirty model
 | 
| +  // associations.
 | 
| +  bool task_pending_;
 | 
| +
 | 
| +  DISALLOW_COPY_AND_ASSIGN(ModelAssociator);
 | 
| +};
 | 
| +
 | 
| +}  // namespace browser_sync
 | 
| +
 | 
| +#endif  // CHROME_BROWSER_SYNC_GLUE_MODEL_ASSOCATOR_H_
 | 
| +#endif  // CHROME_PERSONALIZATION
 | 
| 
 | 
| Property changes on: chrome\browser\sync\glue\model_associator.h
 | 
| ___________________________________________________________________
 | 
| Added: svn:eol-style
 | 
|    + LF
 | 
| 
 | 
| 
 |