OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ | |
6 #define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ | |
7 | |
8 #include <map> | |
9 #include <string> | |
10 | |
11 #include "chrome/browser/chromeos/cros/enum_mapper.h" | |
12 #include "chrome/browser/chromeos/cros/network_library.h" | |
13 | |
14 namespace base { | |
15 class DictionaryValue; | |
16 class Value; | |
17 } | |
18 | |
19 namespace chromeos { | |
20 | |
21 class NetworkDevice; | |
22 | |
23 // This takes a Value of a particular form, and maps the keys in the dictionary | |
24 // to a NetworkDevice object to initialize it properly. Subclasses of this can | |
25 // then customize its methods to parse either Shill data or network setup | |
26 // information obtained from policy or setup file import depending on the | |
27 // EnumMapper supplied. | |
28 class NetworkDeviceParser { | |
29 public: | |
30 virtual ~NetworkDeviceParser(); | |
31 | |
32 virtual NetworkDevice* CreateDeviceFromInfo( | |
33 const std::string& device_path, | |
34 const base::DictionaryValue& info); | |
35 virtual bool UpdateDeviceFromInfo(const base::DictionaryValue& info, | |
36 NetworkDevice* device); | |
37 virtual bool UpdateStatus(const std::string& key, | |
38 const base::Value& value, | |
39 NetworkDevice* device, | |
40 PropertyIndex* index); | |
41 | |
42 protected: | |
43 // The NetworkDeviceParser does not take ownership of the |mapper|. | |
44 explicit NetworkDeviceParser(const EnumMapper<PropertyIndex>* mapper); | |
45 | |
46 // Creates new NetworkDevice based on device_path. | |
47 // Subclasses should override this method and set the correct parser for this | |
48 // network device if appropriate. | |
49 virtual NetworkDevice* CreateNewNetworkDevice(const std::string& device_path); | |
50 | |
51 virtual bool ParseValue(PropertyIndex index, | |
52 const base::Value& value, | |
53 NetworkDevice* device) = 0; | |
54 virtual ConnectionType ParseType(const std::string& type) = 0; | |
55 | |
56 const EnumMapper<PropertyIndex>& mapper() const { | |
57 return *mapper_; | |
58 } | |
59 | |
60 private: | |
61 const EnumMapper<PropertyIndex>* mapper_; | |
62 DISALLOW_COPY_AND_ASSIGN(NetworkDeviceParser); | |
63 }; | |
64 | |
65 // This takes a Value of a particular form, and uses the keys in the | |
66 // dictionary to create Network (WiFiNetwork, EthernetNetwork, etc.) | |
67 // objects and initialize them properly. Subclasses of this can then | |
68 // customize its methods to parse other forms of input dictionaries. | |
69 class NetworkParser { | |
70 public: | |
71 virtual ~NetworkParser(); | |
72 | |
73 // Called when a new network is encountered. In addition to setting the | |
74 // members on the Network object, the Network's property_map_ variable | |
75 // will include all the property and corresponding value in |info|. | |
76 // Returns NULL upon failure. | |
77 virtual Network* CreateNetworkFromInfo(const std::string& service_path, | |
78 const base::DictionaryValue& info); | |
79 | |
80 // Called when an existing network is has new information that needs | |
81 // to be updated. Network's property_map_ variable will be updated. | |
82 // Returns false upon failure. | |
83 virtual bool UpdateNetworkFromInfo(const base::DictionaryValue& info, | |
84 Network* network); | |
85 | |
86 // Called when an individual attribute of an existing network has | |
87 // changed. |index| is a return value that supplies the appropriate | |
88 // property index for the given key. |index| is filled in even if | |
89 // the update fails. Network's property_map_ variable will be updated. | |
90 // Returns false upon failure. | |
91 virtual bool UpdateStatus(const std::string& key, | |
92 const base::Value& value, | |
93 Network* network, | |
94 PropertyIndex* index); | |
95 | |
96 protected: | |
97 // The NetworkParser does not take ownership of the |mapper|. | |
98 explicit NetworkParser(const EnumMapper<PropertyIndex>* mapper); | |
99 | |
100 // Creates new Network based on type and service_path. | |
101 // Subclasses should override this method and set the correct parser for this | |
102 // network if appropriate. | |
103 virtual Network* CreateNewNetwork(ConnectionType type, | |
104 const std::string& service_path); | |
105 | |
106 // Parses the value and sets the appropriate field on Network. | |
107 virtual bool ParseValue(PropertyIndex index, | |
108 const base::Value& value, | |
109 Network* network); | |
110 | |
111 virtual ConnectionType ParseType(const std::string& type) = 0; | |
112 virtual ConnectionType ParseTypeFromDictionary( | |
113 const base::DictionaryValue& info) = 0; | |
114 | |
115 const EnumMapper<PropertyIndex>& mapper() const { | |
116 return *mapper_; | |
117 } | |
118 | |
119 private: | |
120 const EnumMapper<PropertyIndex>* mapper_; | |
121 DISALLOW_COPY_AND_ASSIGN(NetworkParser); | |
122 }; | |
123 | |
124 } // namespace chromeos | |
125 | |
126 #endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ | |
OLD | NEW |