Remove weave::State interface

All methods moved into weave::Device

BUG:24267885
Change-Id: Ie864c1775a0e0cf2a75b43a2034d6a99688c0c1e
Reviewed-on: https://weave-review.googlesource.com/1224
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index ef5f4e6..7220e85 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -52,9 +52,9 @@
       base::DictionaryValue state;
       state.SetIntegerWithoutPathExpansion("_greeter._greetings_counter",
                                            ++counter_);
-      device_->GetState()->SetProperties(state, nullptr);
+      device_->SetStateProperties(state, nullptr);
 
-      LOG(INFO) << "New state: " << *device_->GetState()->GetState();
+      LOG(INFO) << "New state: " << *device_->GetState();
 
       cmd->Done();
     } else {
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index 57895b2..03e3984 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -19,7 +19,6 @@
 #include <weave/provider/network.h>
 #include <weave/provider/task_runner.h>
 #include <weave/provider/wifi.h>
-#include <weave/state.h>
 
 namespace weave {
 
@@ -46,7 +45,27 @@
       const SettingsChangedCallback& callback) = 0;
 
   virtual Commands* GetCommands() = 0;
-  virtual State* GetState() = 0;
+
+  // Sets callback which is called when stat is changed.
+  virtual void AddStateChangedCallback(const base::Closure& callback) = 0;
+
+  // Returns value of the single property.
+  // |name| is full property name, including package name. e.g. "base.network".
+  virtual std::unique_ptr<base::Value> GetStateProperty(
+      const std::string& name) const = 0;
+
+  // Sets value of the single property.
+  // |name| is full property name, including package name. e.g. "base.network".
+  virtual bool SetStateProperty(const std::string& name,
+                                const base::Value& value,
+                                ErrorPtr* error) = 0;
+
+  // Updates a multiple property values.
+  virtual bool SetStateProperties(const base::DictionaryValue& property_set,
+                                  ErrorPtr* error) = 0;
+
+  // Returns aggregated state properties across all registered packages.
+  virtual std::unique_ptr<base::DictionaryValue> GetState() const = 0;
 
   // Returns current state of GCD connection.
   virtual GcdState GetGcdState() const = 0;
diff --git a/libweave/include/weave/state.h b/libweave/include/weave/state.h
deleted file mode 100644
index 1b68343..0000000
--- a/libweave/include/weave/state.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2015 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIBWEAVE_INCLUDE_WEAVE_STATE_H_
-#define LIBWEAVE_INCLUDE_WEAVE_STATE_H_
-
-#include <base/callback.h>
-#include <base/values.h>
-
-namespace weave {
-
-class State {
- public:
-  // Sets callback which is called when stat is changed.
-  virtual void AddStateChangedCallback(const base::Closure& callback) = 0;
-
-  // Returns value of the single property.
-  // |name| is full property name, including package name. e.g. "base.network".
-  virtual std::unique_ptr<base::Value> GetStateProperty(
-      const std::string& name) = 0;
-
-  // Sets value of the single property.
-  // |name| is full property name, including package name. e.g. "base.network".
-  virtual bool SetStateProperty(const std::string& name,
-                                const base::Value& value,
-                                ErrorPtr* error) = 0;
-
-  // Updates multiple property values.
-  virtual bool SetProperties(const base::DictionaryValue& property_set,
-                             ErrorPtr* error) = 0;
-
-  // Returns aggregated state properties across all registered packages.
-  virtual std::unique_ptr<base::DictionaryValue> GetState() const = 0;
-
- protected:
-  virtual ~State() = default;
-};
-
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_STATE_H_
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index f5fecf5..79ef5d1 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -72,10 +72,6 @@
   return command_manager_.get();
 }
 
-State* DeviceManager::GetState() {
-  return state_manager_.get();
-}
-
 Config* DeviceManager::GetConfig() {
   return device_info_->GetMutableConfig();
 }
@@ -101,6 +97,31 @@
   device_info_->AddGcdStateChangedCallback(callback);
 }
 
+void DeviceManager::AddStateChangedCallback(const base::Closure& callback) {
+  state_manager_->AddChangedCallback(callback);
+}
+
+bool DeviceManager::SetStateProperties(
+    const base::DictionaryValue& property_set,
+    ErrorPtr* error) {
+  return state_manager_->SetProperties(property_set, error);
+}
+
+std::unique_ptr<base::Value> DeviceManager::GetStateProperty(
+    const std::string& name) const {
+  return state_manager_->GetProperty(name);
+}
+
+bool DeviceManager::SetStateProperty(const std::string& name,
+                                     const base::Value& value,
+                                     ErrorPtr* error) {
+  return state_manager_->SetProperty(name, value, error);
+}
+
+std::unique_ptr<base::DictionaryValue> DeviceManager::GetState() const {
+  return state_manager_->GetState();
+}
+
 std::string DeviceManager::Register(const std::string& ticket_id,
                                     ErrorPtr* error) {
   return device_info_->RegisterDevice(ticket_id, error);
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index d96ee9b..fbf2871 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -38,7 +38,17 @@
   void AddSettingsChangedCallback(
       const SettingsChangedCallback& callback) override;
   Commands* GetCommands() override;
-  State* GetState() override;
+
+  void AddStateChangedCallback(const base::Closure& callback) override;
+  bool SetStateProperties(const base::DictionaryValue& property_set,
+                          ErrorPtr* error) override;
+  std::unique_ptr<base::Value> GetStateProperty(
+      const std::string& name) const override;
+  bool SetStateProperty(const std::string& name,
+                        const base::Value& value,
+                        ErrorPtr* error) override;
+  std::unique_ptr<base::DictionaryValue> GetState() const override;
+
   std::string Register(const std::string& ticket_id, ErrorPtr* error) override;
 
   GcdState GetGcdState() const override;
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index f3484ba..1f0b73f 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -243,7 +243,7 @@
   command_manager_->AddOnCommandDefChanged(
       base::Bind(&DeviceRegistrationInfo::OnCommandDefsChanged,
                  weak_factory_.GetWeakPtr()));
-  state_manager_->AddStateChangedCallback(base::Bind(
+  state_manager_->AddChangedCallback(base::Bind(
       &DeviceRegistrationInfo::OnStateChanged, weak_factory_.GetWeakPtr()));
 }
 
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index 09836b6..57c8fa1 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -59,7 +59,7 @@
     command_manager_->AddOnCommandRemovedCallback(base::Bind(
         &CloudDelegateImpl::OnCommandRemoved, weak_factory_.GetWeakPtr()));
 
-    state_manager_->AddStateChangedCallback(base::Bind(
+    state_manager_->AddChangedCallback(base::Bind(
         &CloudDelegateImpl::OnStateChanged, weak_factory_.GetWeakPtr()));
   }
 
diff --git a/libweave/src/states/state_manager.cc b/libweave/src/states/state_manager.cc
index b5da1c7..7fd9715 100644
--- a/libweave/src/states/state_manager.cc
+++ b/libweave/src/states/state_manager.cc
@@ -49,7 +49,7 @@
 
 StateManager::~StateManager() {}
 
-void StateManager::AddStateChangedCallback(const base::Closure& callback) {
+void StateManager::AddChangedCallback(const base::Closure& callback) {
   on_changed_.push_back(callback);
   callback.Run();  // Force to read current state.
 }
@@ -102,21 +102,24 @@
   return all_success;
 }
 
-bool StateManager::SetStateProperty(const std::string& name,
-                                    const base::Value& value,
-                                    ErrorPtr* error) {
-  return SetPropertyValue(name, value, base::Time::Now(), error);
+bool StateManager::SetProperty(const std::string& name,
+                               const base::Value& value,
+                               ErrorPtr* error) {
+  bool result = SetPropertyValue(name, value, base::Time::Now(), error);
+  for (const auto& cb : on_changed_)
+    cb.Run();
+  return result;
 }
 
-std::unique_ptr<base::Value> StateManager::GetStateProperty(
-    const std::string& name) {
+std::unique_ptr<base::Value> StateManager::GetProperty(
+    const std::string& name) const {
   auto parts = SplitAtFirst(name, ".", true);
   const std::string& package_name = parts.first;
   const std::string& property_name = parts.second;
   if (package_name.empty() || property_name.empty())
     return nullptr;
 
-  StatePackage* package = FindPackage(package_name);
+  const StatePackage* package = FindPackage(package_name);
   if (!package)
     return nullptr;
 
@@ -289,6 +292,12 @@
   return (it != packages_.end()) ? it->second.get() : nullptr;
 }
 
+const StatePackage* StateManager::FindPackage(
+    const std::string& package_name) const {
+  auto it = packages_.find(package_name);
+  return (it != packages_.end()) ? it->second.get() : nullptr;
+}
+
 StatePackage* StateManager::FindOrCreatePackage(
     const std::string& package_name) {
   StatePackage* package = FindPackage(package_name);
diff --git a/libweave/src/states/state_manager.h b/libweave/src/states/state_manager.h
index 56dde95..1513781 100644
--- a/libweave/src/states/state_manager.h
+++ b/libweave/src/states/state_manager.h
@@ -15,7 +15,6 @@
 #include <base/callback.h>
 #include <base/macros.h>
 #include <weave/error.h>
-#include <weave/state.h>
 
 #include "src/states/state_change_queue_interface.h"
 #include "src/states/state_package.h"
@@ -34,21 +33,19 @@
 // StateManager is the class that aggregates the device state fragments
 // provided by device daemons and makes the aggregate device state available
 // to the GCD cloud server and local clients.
-class StateManager final : public State {
+class StateManager final {
  public:
   explicit StateManager(StateChangeQueueInterface* state_change_queue);
-  ~StateManager() override;
+  ~StateManager();
 
-  // State overrides.
-  void AddStateChangedCallback(const base::Closure& callback) override;
+  void AddChangedCallback(const base::Closure& callback);
   bool SetProperties(const base::DictionaryValue& property_set,
-                     ErrorPtr* error) override;
-  std::unique_ptr<base::Value> GetStateProperty(
-      const std::string& name) override;
-  bool SetStateProperty(const std::string& name,
-                        const base::Value& value,
-                        ErrorPtr* error) override;
-  std::unique_ptr<base::DictionaryValue> GetState() const override;
+                     ErrorPtr* error);
+  std::unique_ptr<base::Value> GetProperty(const std::string& name) const;
+  bool SetProperty(const std::string& name,
+                   const base::Value& value,
+                   ErrorPtr* error);
+  std::unique_ptr<base::DictionaryValue> GetState() const;
 
   // Initializes the state manager and load device state fragments.
   // Called by Buffet daemon at startup.
@@ -108,6 +105,7 @@
 
   // Finds a package by its name. Returns nullptr if not found.
   StatePackage* FindPackage(const std::string& package_name);
+  const StatePackage* FindPackage(const std::string& package_name) const;
   // Finds a package by its name. If none exists, one will be created.
   StatePackage* FindOrCreatePackage(const std::string& package_name);
 
diff --git a/libweave/src/states/state_manager_unittest.cc b/libweave/src/states/state_manager_unittest.cc
index 184dc35..421fe2f 100644
--- a/libweave/src/states/state_manager_unittest.cc
+++ b/libweave/src/states/state_manager_unittest.cc
@@ -65,7 +65,7 @@
     mgr_.reset(new StateManager(&mock_state_change_queue_));
 
     EXPECT_CALL(*this, OnStateChanged()).Times(1);
-    mgr_->AddStateChangedCallback(
+    mgr_->AddChangedCallback(
         base::Bind(&StateManagerTest::OnStateChanged, base::Unretained(this)));
 
     LoadStateDefinition(GetTestSchema().get(), "default", nullptr);
@@ -263,10 +263,10 @@
 }
 
 TEST_F(StateManagerTest, GetProperty) {
-  EXPECT_JSON_EQ("'Test Model'", *mgr_->GetStateProperty("base.serialNumber"));
-  EXPECT_JSON_EQ("''", *mgr_->GetStateProperty("device.state_property"));
-  EXPECT_EQ(nullptr, mgr_->GetStateProperty("device.unknown"));
-  EXPECT_EQ(nullptr, mgr_->GetStateProperty("unknown.state_property"));
+  EXPECT_JSON_EQ("'Test Model'", *mgr_->GetProperty("base.serialNumber"));
+  EXPECT_JSON_EQ("''", *mgr_->GetProperty("device.state_property"));
+  EXPECT_EQ(nullptr, mgr_->GetProperty("device.unknown"));
+  EXPECT_EQ(nullptr, mgr_->GetProperty("unknown.state_property"));
 }
 
 }  // namespace weave