buffet: Allow setting command results.
Next step in command results support: now there is
CommandInstance::SetResults method which allows results
modifications.
BUG=chromium:435607
TEST=cros_workon_make --test buffet
Change-Id: I1f5da9c3613a2996cea3f65f07945cc64bfeda2e
Reviewed-on: https://chromium-review.googlesource.com/231337
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Anton Muhin <antonm@chromium.org>
Commit-Queue: Anton Muhin <antonm@chromium.org>
diff --git a/buffet/commands/dbus_command_proxy.cc b/buffet/commands/dbus_command_proxy.cc
index 2778a78..a067772 100644
--- a/buffet/commands/dbus_command_proxy.cc
+++ b/buffet/commands/dbus_command_proxy.cc
@@ -7,7 +7,9 @@
#include <chromeos/dbus/async_event_sequencer.h>
#include <chromeos/dbus/exported_object_manager.h>
+#include "buffet/commands/command_definition.h"
#include "buffet/commands/command_instance.h"
+#include "buffet/commands/object_schema.h"
#include "buffet/commands/prop_constraints.h"
#include "buffet/commands/prop_types.h"
@@ -34,19 +36,20 @@
dbus_adaptor_.SetId(command_instance_->GetID());
dbus_adaptor_.SetStatus(command_instance_->GetStatus());
dbus_adaptor_.SetProgress(command_instance_->GetProgress());
- // Convert a string-to-PropValue map into a string-to-Any map which can be
- // sent over D-Bus.
- chromeos::VariantDictionary params;
- for (const auto& param_pair : command_instance_->GetParameters()) {
- params.insert(std::make_pair(param_pair.first,
- param_pair.second->GetValueAsAny()));
- }
- dbus_adaptor_.SetParameters(params);
+
+ dbus_adaptor_.SetParameters(ObjectToDBusVariant(
+ command_instance_->GetParameters()));
+ dbus_adaptor_.SetResults(ObjectToDBusVariant(
+ command_instance_->GetResults()));
// Register the command DBus object and expose its methods and properties.
dbus_object_.RegisterAsync(completion_callback);
}
+void DBusCommandProxy::OnResultsChanged(const native_types::Object& results) {
+ dbus_adaptor_.SetResults(ObjectToDBusVariant(results));
+}
+
void DBusCommandProxy::OnStatusChanged(const std::string& status) {
dbus_adaptor_.SetStatus(status);
}
@@ -71,6 +74,20 @@
return true;
}
+bool DBusCommandProxy::SetResults(chromeos::ErrorPtr* error,
+ const chromeos::VariantDictionary& results) {
+ LOG(INFO) << "Received call to Command<"
+ << command_instance_->GetName() << ">::SetResults()";
+
+ auto results_schema = command_instance_->GetCommandDefinition()->GetResults();
+ native_types::Object obj;
+ if (!ObjectFromDBusVariant(results_schema.get(), results, &obj, error))
+ return false;
+
+ command_instance_->SetResults(obj);
+ return true;
+}
+
void DBusCommandProxy::Abort() {
LOG(INFO) << "Received call to Command<"
<< command_instance_->GetName() << ">::Abort()";