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