|  | // Copyright 2015 The Weave 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_COMMAND_H_ | 
|  | #define LIBWEAVE_INCLUDE_WEAVE_COMMAND_H_ | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #include <base/values.h> | 
|  | #include <weave/error.h> | 
|  |  | 
|  | namespace weave { | 
|  |  | 
|  | class Command { | 
|  | public: | 
|  | enum class State { | 
|  | kQueued, | 
|  | kInProgress, | 
|  | kPaused, | 
|  | kError, | 
|  | kDone, | 
|  | kCancelled, | 
|  | kAborted, | 
|  | kExpired, | 
|  | }; | 
|  |  | 
|  | enum class Origin { kLocal, kCloud }; | 
|  |  | 
|  | // Returns the full command ID. | 
|  | virtual const std::string& GetID() const = 0; | 
|  |  | 
|  | // Returns the full name of the command. | 
|  | virtual const std::string& GetName() const = 0; | 
|  |  | 
|  | // Returns the full path to the component this command is intended for. | 
|  | virtual const std::string& GetComponent() const = 0; | 
|  |  | 
|  | // Returns the command state. | 
|  | virtual Command::State GetState() const = 0; | 
|  |  | 
|  | // Returns the origin of the command. | 
|  | virtual Command::Origin GetOrigin() const = 0; | 
|  |  | 
|  | // Returns the command parameters. | 
|  | virtual const base::DictionaryValue& GetParameters() const = 0; | 
|  |  | 
|  | // Returns the command progress. | 
|  | virtual const base::DictionaryValue& GetProgress() const = 0; | 
|  |  | 
|  | // Returns the command results. | 
|  | virtual const base::DictionaryValue& GetResults() const = 0; | 
|  |  | 
|  | // Returns the command error. | 
|  | virtual const Error* GetError() const = 0; | 
|  |  | 
|  | // Updates the command progress. The |progress| should match the schema. | 
|  | // Returns false if |progress| value is incorrect. | 
|  | virtual bool SetProgress(const base::DictionaryValue& progress, | 
|  | ErrorPtr* error) = 0; | 
|  |  | 
|  | // Sets command into terminal "done" state. | 
|  | // Updates the command results. The |results| should match the schema. | 
|  | // Returns false if |results| value is incorrect. | 
|  | virtual bool Complete(const base::DictionaryValue& results, | 
|  | ErrorPtr* error) = 0; | 
|  |  | 
|  | // Sets command into paused state. | 
|  | // This is not terminal state. Command can be resumed with |SetProgress| call. | 
|  | virtual bool Pause(ErrorPtr* error) = 0; | 
|  |  | 
|  | // Sets command into error state and assign error. | 
|  | // This is not terminal state. Command can be resumed with |SetProgress| call. | 
|  | virtual bool SetError(const Error* command_error, ErrorPtr* error) = 0; | 
|  |  | 
|  | // Aborts command execution. | 
|  | // Sets command into terminal "aborted" state. | 
|  | virtual bool Abort(const Error* command_error, ErrorPtr* error) = 0; | 
|  |  | 
|  | // Cancels command execution. | 
|  | // Sets command into terminal "canceled" state. | 
|  | virtual bool Cancel(ErrorPtr* error) = 0; | 
|  |  | 
|  | protected: | 
|  | virtual ~Command() {} | 
|  | }; | 
|  |  | 
|  | }  // namespace weave | 
|  |  | 
|  | #endif  // LIBWEAVE_INCLUDE_WEAVE_COMMAND_H_ |