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