Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: sync/notifier/object_id_invalidation_map.cc

Issue 23441042: Refactor common invalidation framework types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sync/notifier/object_id_invalidation_map.h" 5 #include "sync/notifier/object_id_invalidation_map.h"
6 6
7 #include <algorithm> 7 #include "base/json/json_string_value_serializer.h"
8
9 #include "base/compiler_specific.h"
10 #include "base/values.h"
11 8
12 namespace syncer { 9 namespace syncer {
13 10
14 ObjectIdSet ObjectIdInvalidationMapToSet( 11 // static
15 const ObjectIdInvalidationMap& invalidation_map) { 12 ObjectIdInvalidationMap ObjectIdInvalidationMap::InvalidateAll(
16 ObjectIdSet ids; 13 const ObjectIdSet& ids) {
17 for (ObjectIdInvalidationMap::const_iterator it = invalidation_map.begin(); 14 ObjectIdInvalidationMap invalidate_all;
18 it != invalidation_map.end(); ++it) { 15 for (ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) {
19 ids.insert(it->first); 16 invalidate_all.Insert(Invalidation::InitUnknownVersion(*it));
20 } 17 }
21 return ids; 18 return invalidate_all;
22 } 19 }
23 20
24 ObjectIdInvalidationMap ObjectIdSetToInvalidationMap( 21 ObjectIdInvalidationMap::ObjectIdInvalidationMap() {}
25 const ObjectIdSet& ids, int64 version, const std::string& payload) { 22
26 ObjectIdInvalidationMap invalidation_map; 23 ObjectIdInvalidationMap::~ObjectIdInvalidationMap() {}
27 for (ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) { 24
28 // TODO(dcheng): Do we need to provide a way to set AckHandle? 25 ObjectIdSet ObjectIdInvalidationMap::GetObjectIds() const {
29 invalidation_map[*it].version = version; 26 ObjectIdSet ret;
30 invalidation_map[*it].payload = payload; 27 for (IdToListMap::const_iterator it = map_.begin(); it != map_.end(); ++it) {
28 ret.insert(it->first);
31 } 29 }
32 return invalidation_map; 30 return ret;
33 } 31 }
34 32
35 namespace { 33 bool ObjectIdInvalidationMap::Empty() const {
36 34 return map_.empty();
37 struct ObjectIdInvalidationMapValueEquals {
38 bool operator()(const ObjectIdInvalidationMap::value_type& value1,
39 const ObjectIdInvalidationMap::value_type& value2) const {
40 return
41 (value1.first == value2.first) &&
42 value1.second.Equals(value2.second);
43 }
44 };
45
46 } // namespace
47
48 bool ObjectIdInvalidationMapEquals(
49 const ObjectIdInvalidationMap& invalidation_map1,
50 const ObjectIdInvalidationMap& invalidation_map2) {
51 return
52 (invalidation_map1.size() == invalidation_map2.size()) &&
53 std::equal(invalidation_map1.begin(), invalidation_map1.end(),
54 invalidation_map2.begin(),
55 ObjectIdInvalidationMapValueEquals());
56 } 35 }
57 36
58 scoped_ptr<base::ListValue> ObjectIdInvalidationMapToValue( 37 void ObjectIdInvalidationMap::Insert(const Invalidation& invalidation) {
59 const ObjectIdInvalidationMap& invalidation_map) { 38 map_[invalidation.GetObjectId()].Insert(invalidation);
39 }
40
41 ObjectIdInvalidationMap ObjectIdInvalidationMap::WithObjects(
42 const ObjectIdSet& ids) const {
43 IdToListMap new_map;
44 for (ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) {
45 IdToListMap::const_iterator lookup = map_.find(*it);
46 if (lookup != map_.end()) {
47 new_map[*it] = lookup->second;
48 }
49 }
50 return ObjectIdInvalidationMap(new_map);
51 }
52
53 const OrderedInvalidationList& ObjectIdInvalidationMap::ForObject(
54 invalidation::ObjectId id) const {
55 IdToListMap::const_iterator lookup = map_.find(id);
56 DCHECK(lookup != map_.end());
57 DCHECK(!lookup->second.IsEmpty());
58 return lookup->second;
59 }
60
61 void ObjectIdInvalidationMap::GetAllInvalidations(
62 std::vector<syncer::Invalidation>* out) const {
63 for (IdToListMap::const_iterator it = map_.begin(); it != map_.end(); ++it) {
64 out->insert(out->begin(), it->second.begin(), it->second.end());
65 }
66 }
67
68 bool ObjectIdInvalidationMap::operator==(
69 const ObjectIdInvalidationMap& other) const {
70 return map_ == other.map_;
71 }
72
73 scoped_ptr<base::ListValue> ObjectIdInvalidationMap::ToValue() const {
60 scoped_ptr<base::ListValue> value(new base::ListValue()); 74 scoped_ptr<base::ListValue> value(new base::ListValue());
61 for (ObjectIdInvalidationMap::const_iterator it = invalidation_map.begin(); 75 for (IdToListMap::const_iterator it1 = map_.begin();
62 it != invalidation_map.end(); ++it) { 76 it1 != map_.end(); ++it1) {
63 base::DictionaryValue* entry = new base::DictionaryValue(); 77 for (OrderedInvalidationList::const_iterator it2 = it1->second.begin();
64 entry->Set("objectId", ObjectIdToValue(it->first).release()); 78 it2 != it1->second.end(); ++it2) {
65 entry->Set("state", it->second.ToValue().release()); 79 value->Append(it2->ToValue().release());
66 value->Append(entry); 80 }
67 } 81 }
68 return value.Pass(); 82 return value.Pass();
69 } 83 }
70 84
71 bool ObjectIdInvalidationMapFromValue(const base::ListValue& value, 85 bool ObjectIdInvalidationMap::ResetFromValue(const base::ListValue& value) {
72 ObjectIdInvalidationMap* out) { 86 map_.clear();
73 out->clear(); 87 for (size_t i = 0; i < value.GetSize(); ++i) {
74 for (base::ListValue::const_iterator it = value.begin(); 88 const DictionaryValue* dict;
75 it != value.end(); ++it) {
76 const base::DictionaryValue* entry = NULL;
77 const base::DictionaryValue* id_value = NULL;
78 const base::DictionaryValue* invalidation_value = NULL;
79 invalidation::ObjectId id;
80 Invalidation invalidation; 89 Invalidation invalidation;
81 if (!(*it)->GetAsDictionary(&entry) || 90 if (!value.GetDictionary(i, &dict)
82 !entry->GetDictionary("objectId", &id_value) || 91 || !invalidation.ResetFromValue(*dict)) {
83 !entry->GetDictionary("state", &invalidation_value) ||
84 !ObjectIdFromValue(*id_value, &id) ||
85 !invalidation.ResetFromValue(*invalidation_value)) {
86 return false; 92 return false;
87 } 93 }
88 ignore_result(out->insert(std::make_pair(id, invalidation))); 94 Insert(invalidation);
89 } 95 }
90 return true; 96 return true;
91 } 97 }
92 98
99 std::string ObjectIdInvalidationMap::ToString() const {
100 std::string output;
101 JSONStringValueSerializer serializer(&output);
102 serializer.set_pretty_print(true);
103 serializer.Serialize(*ToValue().get());
104 return output;
105 }
106
107 ObjectIdInvalidationMap::ObjectIdInvalidationMap(const IdToListMap& map)
108 : map_(map) {}
109
93 } // namespace syncer 110 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698