1// Copyright (c) 2009 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// Wrappers to help us work with ids and protobuffers.
6
7#ifndef CHROME_BROWSER_SYNC_ENGINE_SYNCPROTO_H_
8#define CHROME_BROWSER_SYNC_ENGINE_SYNCPROTO_H_
9#pragma once
10
11#include "chrome/browser/sync/protocol/bookmark_specifics.pb.h"
12#include "chrome/browser/sync/protocol/password_specifics.pb.h"
13#include "chrome/browser/sync/protocol/preference_specifics.pb.h"
14#include "chrome/browser/sync/protocol/sync.pb.h"
15#include "chrome/browser/sync/syncable/model_type.h"
16#include "chrome/browser/sync/syncable/syncable_id.h"
17
18namespace browser_sync {
19
20template<class Base>
21class IdWrapper : public Base {
22 public:
23  IdWrapper() {}
24  explicit IdWrapper(const Base& other) : Base(other) {
25  }
26  syncable::Id id() const {
27    return syncable::Id::CreateFromServerId(Base::id_string());
28  }
29  void set_id(const syncable::Id& id) {
30    Base::set_id_string(id.GetServerId());
31  }
32};
33
34// These wrapper classes contain no data, so their super classes can be cast to
35// them directly.
36class SyncEntity : public IdWrapper<sync_pb::SyncEntity> {
37 public:
38  SyncEntity() {}
39  explicit SyncEntity(const sync_pb::SyncEntity& other)
40      : IdWrapper<sync_pb::SyncEntity>(other) {
41  }
42
43  void set_parent_id(const syncable::Id& id) {
44    set_parent_id_string(id.GetServerId());
45  }
46  syncable::Id parent_id() const {
47    return syncable::Id::CreateFromServerId(parent_id_string());
48  }
49  void set_old_parent_id(const syncable::Id& id) {
50    IdWrapper<sync_pb::SyncEntity>::set_old_parent_id(
51      id.GetServerId());
52  }
53  syncable::Id old_parent_id() const {
54    return syncable::Id::CreateFromServerId(
55      sync_pb::SyncEntity::old_parent_id());
56  }
57  // Binary predicate helper to determine whether an Entity represents a folder
58  // or non-folder object. Use this instead of checking these properties
59  // directly, because the addition of bookmarks to the protobuf schema
60  // makes the check slightly more tricky.
61  bool IsFolder() const {
62    return ((has_folder() && folder()) ||
63            (has_bookmarkdata() && bookmarkdata().bookmark_folder()));
64  }
65
66  syncable::ModelType GetModelType() const {
67    return syncable::GetModelType(*this);
68  }
69};
70
71class CommitResponse_EntryResponse
72    : public IdWrapper<sync_pb::CommitResponse_EntryResponse> {
73};
74
75class ClientToServerMessage : public sync_pb::ClientToServerMessage {
76 public:
77  ClientToServerMessage() {
78    set_protocol_version(protocol_version());
79  }
80};
81
82typedef sync_pb::CommitMessage CommitMessage;
83typedef sync_pb::ClientToServerResponse ClientToServerResponse;
84typedef sync_pb::CommitResponse CommitResponse;
85typedef sync_pb::GetUpdatesResponse GetUpdatesResponse;
86typedef sync_pb::GetUpdatesMessage GetUpdatesMessage;
87
88}  // namespace browser_sync
89
90#endif  // CHROME_BROWSER_SYNC_ENGINE_SYNCPROTO_H_
91