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 "components/cloud_devices/common/cloud_device_description.h" 6 7 #include "base/json/json_reader.h" 8 #include "base/json/json_writer.h" 9 #include "base/logging.h" 10 #include "base/values.h" 11 #include "components/cloud_devices/common/cloud_device_description_consts.h" 12 13 namespace cloud_devices { 14 CloudDeviceDescription()15CloudDeviceDescription::CloudDeviceDescription() { 16 Reset(); 17 } 18 ~CloudDeviceDescription()19CloudDeviceDescription::~CloudDeviceDescription() { 20 } 21 Reset()22void CloudDeviceDescription::Reset() { 23 root_.reset(new base::DictionaryValue); 24 root_->SetString(json::kVersion, json::kVersion10); 25 } 26 InitFromDictionary(scoped_ptr<base::DictionaryValue> root)27bool CloudDeviceDescription::InitFromDictionary( 28 scoped_ptr<base::DictionaryValue> root) { 29 if (!root) 30 return false; 31 Reset(); 32 root_ = root.Pass(); 33 std::string version; 34 root_->GetString(json::kVersion, &version); 35 return version == json::kVersion10; 36 } 37 InitFromString(const std::string & json)38bool CloudDeviceDescription::InitFromString(const std::string& json) { 39 scoped_ptr<base::Value> parsed(base::JSONReader::Read(json)); 40 base::DictionaryValue* description = NULL; 41 if (!parsed || !parsed->GetAsDictionary(&description)) 42 return false; 43 ignore_result(parsed.release()); 44 return InitFromDictionary(make_scoped_ptr(description)); 45 } 46 ToString() const47std::string CloudDeviceDescription::ToString() const { 48 std::string json; 49 base::JSONWriter::WriteWithOptions( 50 root_.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &json); 51 return json; 52 } 53 GetItem(const std::string & path) const54const base::DictionaryValue* CloudDeviceDescription::GetItem( 55 const std::string& path) const { 56 const base::DictionaryValue* value = NULL; 57 root_->GetDictionary(path, &value); 58 return value; 59 } 60 CreateItem(const std::string & path)61base::DictionaryValue* CloudDeviceDescription::CreateItem( 62 const std::string& path) { 63 base::DictionaryValue* value = new base::DictionaryValue; 64 root_->Set(path, value); 65 return value; 66 } 67 GetListItem(const std::string & path) const68const base::ListValue* CloudDeviceDescription::GetListItem( 69 const std::string& path) const { 70 const base::ListValue* value = NULL; 71 root_->GetList(path, &value); 72 return value; 73 } 74 CreateListItem(const std::string & path)75base::ListValue* CloudDeviceDescription::CreateListItem( 76 const std::string& path) { 77 base::ListValue* value = new base::ListValue; 78 root_->Set(path, value); 79 return value; 80 } 81 82 } // namespace cloud_devices 83