1 // Copyright 2014 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 #include "sync/test/fake_server/fake_server_entity.h"
6
7 #include <limits>
8 #include <string>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/guid.h"
13 #include "base/logging.h"
14 #include "base/memory/ref_counted.h"
15 #include "base/memory/scoped_ptr.h"
16 #include "base/strings/string_number_conversions.h"
17 #include "base/strings/string_util.h"
18 #include "base/strings/stringprintf.h"
19 #include "net/base/net_errors.h"
20 #include "net/http/http_status_code.h"
21 #include "sync/internal_api/public/base/model_type.h"
22 #include "sync/protocol/sync.pb.h"
23
24 using std::string;
25 using std::vector;
26
27 using syncer::ModelType;
28
29 // The separator used when formatting IDs.
30 //
31 // We chose the underscore character because it doesn't conflict with the
32 // special characters used by base/base64.h's encoding, which is also used in
33 // the construction of some IDs.
34 const char kIdSeparator[] = "_";
35
36 namespace fake_server {
37
~FakeServerEntity()38 FakeServerEntity::~FakeServerEntity() { }
39
GetId() const40 const std::string& FakeServerEntity::GetId() const {
41 return id_;
42 }
43
GetModelType() const44 ModelType FakeServerEntity::GetModelType() const {
45 return model_type_;
46 }
47
GetVersion() const48 int64 FakeServerEntity::GetVersion() const {
49 return version_;
50 }
51
SetVersion(int64 version)52 void FakeServerEntity::SetVersion(int64 version) {
53 version_ = version;
54 }
55
GetName() const56 const std::string& FakeServerEntity::GetName() const {
57 return name_;
58 }
59
60 // static
CreateId(const ModelType & model_type,const string & inner_id)61 string FakeServerEntity::CreateId(const ModelType& model_type,
62 const string& inner_id) {
63 int field_number = GetSpecificsFieldNumberFromModelType(model_type);
64 return base::StringPrintf("%d%s%s",
65 field_number,
66 kIdSeparator,
67 inner_id.c_str());
68 }
69
70 // static
GetTopLevelId(const ModelType & model_type)71 std::string FakeServerEntity::GetTopLevelId(const ModelType& model_type) {
72 return FakeServerEntity::CreateId(
73 model_type,
74 syncer::ModelTypeToRootTag(model_type));
75 }
76
77 // static
GetModelTypeFromId(const string & id)78 ModelType FakeServerEntity::GetModelTypeFromId(const string& id) {
79 vector<string> tokens;
80 size_t token_count = Tokenize(id, kIdSeparator, &tokens);
81
82 int field_number;
83 if (token_count != 2 || !base::StringToInt(tokens[0], &field_number)) {
84 return syncer::UNSPECIFIED;
85 }
86
87 return syncer::GetModelTypeFromSpecificsFieldNumber(field_number);
88 }
89
FakeServerEntity(const string & id,const ModelType & model_type,int64 version,const string & name)90 FakeServerEntity::FakeServerEntity(const string& id,
91 const ModelType& model_type,
92 int64 version,
93 const string& name)
94 : model_type_(model_type),
95 id_(id),
96 version_(version),
97 name_(name) {}
98
SerializeBaseProtoFields(sync_pb::SyncEntity * sync_entity)99 void FakeServerEntity::SerializeBaseProtoFields(
100 sync_pb::SyncEntity* sync_entity) {
101 // FakeServerEntity fields
102 sync_entity->set_id_string(id_);
103 sync_entity->set_version(version_);
104 sync_entity->set_name(name_);
105
106 // Data via accessors
107 sync_entity->set_deleted(IsDeleted());
108 sync_entity->set_folder(IsFolder());
109 }
110
111 } // namespace fake_server
112