- add sources.
[platform/framework/web/crosswalk.git] / src / sync / notifier / object_id_invalidation_map.cc
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
3 // found in the LICENSE file.
4
5 #include "sync/notifier/object_id_invalidation_map.h"
6
7 #include "base/json/json_string_value_serializer.h"
8
9 namespace syncer {
10
11 // static
12 ObjectIdInvalidationMap ObjectIdInvalidationMap::InvalidateAll(
13     const ObjectIdSet& ids) {
14   ObjectIdInvalidationMap invalidate_all;
15   for (ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) {
16     invalidate_all.Insert(Invalidation::InitUnknownVersion(*it));
17   }
18   return invalidate_all;
19 }
20
21 ObjectIdInvalidationMap::ObjectIdInvalidationMap() {}
22
23 ObjectIdInvalidationMap::~ObjectIdInvalidationMap() {}
24
25 ObjectIdSet ObjectIdInvalidationMap::GetObjectIds() const {
26   ObjectIdSet ret;
27   for (IdToListMap::const_iterator it = map_.begin(); it != map_.end(); ++it) {
28     ret.insert(it->first);
29   }
30   return ret;
31 }
32
33 bool ObjectIdInvalidationMap::Empty() const {
34   return map_.empty();
35 }
36
37 void ObjectIdInvalidationMap::Insert(const Invalidation& invalidation) {
38   map_[invalidation.object_id()].Insert(invalidation);
39 }
40
41 ObjectIdInvalidationMap ObjectIdInvalidationMap::GetSubsetWithObjectIds(
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 SingleObjectInvalidationSet& 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 {
74   scoped_ptr<base::ListValue> value(new base::ListValue());
75   for (IdToListMap::const_iterator it1 = map_.begin();
76        it1 != map_.end(); ++it1) {
77     for (SingleObjectInvalidationSet::const_iterator it2 =
78          it1->second.begin(); it2 != it1->second.end(); ++it2) {
79       value->Append(it2->ToValue().release());
80     }
81   }
82   return value.Pass();
83 }
84
85 bool ObjectIdInvalidationMap::ResetFromValue(const base::ListValue& value) {
86   map_.clear();
87   for (size_t i = 0; i < value.GetSize(); ++i) {
88     const DictionaryValue* dict;
89     if (!value.GetDictionary(i, &dict)) {
90       return false;
91     }
92     scoped_ptr<Invalidation> invalidation = Invalidation::InitFromValue(*dict);
93     if (!invalidation) {
94       return false;
95     }
96     Insert(*invalidation.get());
97   }
98   return true;
99 }
100
101 std::string ObjectIdInvalidationMap::ToString() const {
102   std::string output;
103   JSONStringValueSerializer serializer(&output);
104   serializer.set_pretty_print(true);
105   serializer.Serialize(*ToValue().get());
106   return output;
107 }
108
109 ObjectIdInvalidationMap::ObjectIdInvalidationMap(const IdToListMap& map)
110   : map_(map) {}
111
112 }  // namespace syncer