OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ |
6 #define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ | 6 #define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <map> | 10 #include <map> |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 template <typename EnumType> | 45 template <typename EnumType> |
46 class EnumMapper { | 46 class EnumMapper { |
47 public: | 47 public: |
48 struct Pair { | 48 struct Pair { |
49 const char* key; | 49 const char* key; |
50 const EnumType value; | 50 const EnumType value; |
51 }; | 51 }; |
52 | 52 |
53 EnumMapper(const Pair* list, size_t num_entries, EnumType unknown) | 53 EnumMapper(const Pair* list, size_t num_entries, EnumType unknown) |
54 : unknown_value_(unknown) { | 54 : unknown_value_(unknown) { |
55 for (size_t i = 0; i < num_entries; ++i, ++list) | 55 for (size_t i = 0; i < num_entries; ++i, ++list) { |
56 enum_map_[list->key] = list->value; | 56 enum_map_[list->key] = list->value; |
| 57 inverse_enum_map_[list->value] = list->key; |
| 58 } |
57 } | 59 } |
58 | 60 |
59 EnumType Get(const std::string& type) const { | 61 EnumType Get(const std::string& type) const { |
60 EnumMapConstIter iter = enum_map_.find(type); | 62 EnumMapConstIter iter = enum_map_.find(type); |
61 if (iter != enum_map_.end()) | 63 if (iter != enum_map_.end()) |
62 return iter->second; | 64 return iter->second; |
63 return unknown_value_; | 65 return unknown_value_; |
64 } | 66 } |
65 | 67 |
| 68 std::string GetKey(EnumType type) const { |
| 69 InverseEnumMapConstIter iter = inverse_enum_map_.find(type); |
| 70 if (iter != inverse_enum_map_.end()) |
| 71 return iter->second; |
| 72 return std::string(); |
| 73 } |
| 74 |
66 private: | 75 private: |
67 typedef typename std::map<std::string, EnumType> EnumMap; | 76 typedef typename std::map<std::string, EnumType> EnumMap; |
| 77 typedef typename std::map<EnumType, std::string> InverseEnumMap; |
68 typedef typename EnumMap::const_iterator EnumMapConstIter; | 78 typedef typename EnumMap::const_iterator EnumMapConstIter; |
| 79 typedef typename InverseEnumMap::const_iterator InverseEnumMapConstIter; |
69 EnumMap enum_map_; | 80 EnumMap enum_map_; |
| 81 InverseEnumMap inverse_enum_map_; |
70 EnumType unknown_value_; | 82 EnumType unknown_value_; |
71 DISALLOW_COPY_AND_ASSIGN(EnumMapper); | 83 DISALLOW_COPY_AND_ASSIGN(EnumMapper); |
72 }; | 84 }; |
73 | 85 |
74 // This takes a Value of a particular form, and maps the keys in the | 86 // This takes a Value of a particular form, and maps the keys in the |
75 // dictionary to a NetworkDevice object to initialize it properly. | 87 // dictionary to a NetworkDevice object to initialize it properly. |
76 // Subclasses of this can then customize its methods to parse either | 88 // Subclasses of this can then customize its methods to parse either |
77 // libcros (flimflam) data or network setup information obtained from | 89 // libcros (flimflam) data or network setup information obtained from |
78 // policy or setup file import depending on the EnumMapper supplied. | 90 // policy or setup file import depending on the EnumMapper supplied. |
79 class NetworkDeviceParser { | 91 class NetworkDeviceParser { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 }; | 126 }; |
115 | 127 |
116 // This takes a Value of a particular form, and uses the keys in the | 128 // This takes a Value of a particular form, and uses the keys in the |
117 // dictionary to create Network (WiFiNetwork, EthernetNetwork, etc.) | 129 // dictionary to create Network (WiFiNetwork, EthernetNetwork, etc.) |
118 // objects and initialize them properly. Subclasses of this can then | 130 // objects and initialize them properly. Subclasses of this can then |
119 // customize its methods to parse other forms of input dictionaries. | 131 // customize its methods to parse other forms of input dictionaries. |
120 class NetworkParser { | 132 class NetworkParser { |
121 public: | 133 public: |
122 virtual ~NetworkParser(); | 134 virtual ~NetworkParser(); |
123 | 135 |
124 // Called when a new network is encountered. Returns NULL upon failure. | 136 // Called when a new network is encountered. In addition to setting the |
| 137 // members on the Network object, the Network's property_map_ variable |
| 138 // will include all the property and corresponding value in |info|. |
| 139 // Returns NULL upon failure. |
125 virtual Network* CreateNetworkFromInfo(const std::string& service_path, | 140 virtual Network* CreateNetworkFromInfo(const std::string& service_path, |
126 const base::DictionaryValue& info); | 141 const base::DictionaryValue& info); |
127 | 142 |
128 // Called when an existing network is has new information that needs | 143 // Called when an existing network is has new information that needs |
129 // to be updated. Returns false upon failure. | 144 // to be updated. Network's property_map_ variable will be updated. |
| 145 // Returns false upon failure. |
130 virtual bool UpdateNetworkFromInfo(const base::DictionaryValue& info, | 146 virtual bool UpdateNetworkFromInfo(const base::DictionaryValue& info, |
131 Network* network); | 147 Network* network); |
132 | 148 |
133 // Called when an individual attribute of an existing network has | 149 // Called when an individual attribute of an existing network has |
134 // changed. |index| is a return value that supplies the appropriate | 150 // changed. |index| is a return value that supplies the appropriate |
135 // property index for the given key. |index| is filled in even if | 151 // property index for the given key. |index| is filled in even if |
136 // the update fails. Returns false upon failure. | 152 // the update fails. Network's property_map_ variable will be updated. |
| 153 // Returns false upon failure. |
137 virtual bool UpdateStatus(const std::string& key, | 154 virtual bool UpdateStatus(const std::string& key, |
138 const base::Value& value, | 155 const base::Value& value, |
139 Network* network, | 156 Network* network, |
140 PropertyIndex* index); | 157 PropertyIndex* index); |
141 | 158 |
142 protected: | 159 protected: |
143 // The NetworkParser does not take ownership of the |mapper|. | 160 // The NetworkParser does not take ownership of the |mapper|. |
144 explicit NetworkParser(const EnumMapper<PropertyIndex>* mapper); | 161 explicit NetworkParser(const EnumMapper<PropertyIndex>* mapper); |
145 | 162 |
146 // Creates new Network based on type and service_path. | 163 // Creates new Network based on type and service_path. |
(...skipping 16 matching lines...) Expand all Loading... |
163 } | 180 } |
164 | 181 |
165 private: | 182 private: |
166 const EnumMapper<PropertyIndex>* mapper_; | 183 const EnumMapper<PropertyIndex>* mapper_; |
167 DISALLOW_COPY_AND_ASSIGN(NetworkParser); | 184 DISALLOW_COPY_AND_ASSIGN(NetworkParser); |
168 }; | 185 }; |
169 | 186 |
170 } // namespace chromeos | 187 } // namespace chromeos |
171 | 188 |
172 #endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ | 189 #endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ |
OLD | NEW |