// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/cloud_devices/common/cloud_device_description.h" #include "base/json/json_reader.h" #include "base/json/json_writer.h" #include "base/logging.h" #include "base/values.h" #include "components/cloud_devices/common/cloud_device_description_consts.h" namespace cloud_devices { CloudDeviceDescription::CloudDeviceDescription() { Reset(); } CloudDeviceDescription::~CloudDeviceDescription() { } void CloudDeviceDescription::Reset() { root_.reset(new base::DictionaryValue); root_->SetString(json::kVersion, json::kVersion10); } bool CloudDeviceDescription::InitFromDictionary( scoped_ptr root) { if (!root) return false; Reset(); root_ = root.Pass(); std::string version; root_->GetString(json::kVersion, &version); return version == json::kVersion10; } bool CloudDeviceDescription::InitFromString(const std::string& json) { scoped_ptr parsed(base::JSONReader::Read(json)); base::DictionaryValue* description = NULL; if (!parsed || !parsed->GetAsDictionary(&description)) return false; ignore_result(parsed.release()); return InitFromDictionary(make_scoped_ptr(description)); } std::string CloudDeviceDescription::ToString() const { std::string json; base::JSONWriter::WriteWithOptions( root_.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &json); return json; } const base::DictionaryValue* CloudDeviceDescription::GetItem( const std::string& path) const { const base::DictionaryValue* value = NULL; root_->GetDictionary(path, &value); return value; } base::DictionaryValue* CloudDeviceDescription::CreateItem( const std::string& path) { base::DictionaryValue* value = new base::DictionaryValue; root_->Set(path, value); return value; } const base::ListValue* CloudDeviceDescription::GetListItem( const std::string& path) const { const base::ListValue* value = NULL; root_->GetList(path, &value); return value; } base::ListValue* CloudDeviceDescription::CreateListItem( const std::string& path) { base::ListValue* value = new base::ListValue; root_->Set(path, value); return value; } } // namespace cloud_devices