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#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICE_DESCRIPTION_H_
6#define COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICE_DESCRIPTION_H_
7
8#include <string>
9
10#include "base/callback.h"
11
12namespace base {
13class DictionaryValue;
14class ListValue;
15}
16
17namespace cloud_devices {
18
19// Provides parsing, serialization and validation Cloud Device Description or
20// Cloud Job Ticket.
21// https://developers.google.com/cloud-print/docs/cdd
22class CloudDeviceDescription {
23 public:
24  CloudDeviceDescription();
25  ~CloudDeviceDescription();
26
27  void Reset();
28
29  bool InitFromDictionary(scoped_ptr<base::DictionaryValue> root);
30  bool InitFromString(const std::string& json);
31
32  std::string ToString() const;
33
34  const base::DictionaryValue& root() const { return *root_; }
35
36  // Returns dictionary with capability/option.
37  // Returns NULL if missing.
38  const base::DictionaryValue* GetItem(const std::string& path) const;
39
40  // Create dictionary for capability/option.
41  // Never returns NULL.
42  base::DictionaryValue* CreateItem(const std::string& path);
43
44  // Returns list with capability/option.
45  // Returns NULL if missing.
46  const base::ListValue* GetListItem(const std::string& path) const;
47
48  // Create list for capability/option.
49  // Never returns NULL.
50  base::ListValue* CreateListItem(const std::string& path);
51
52 private:
53  scoped_ptr<base::DictionaryValue> root_;
54
55  DISALLOW_COPY_AND_ASSIGN(CloudDeviceDescription);
56};
57
58}  // namespace cloud_devices
59
60#endif  // COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICE_DESCRIPTION_H_
61