| // 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_COMMAND_H_ |
| #define LIBWEAVE_INCLUDE_WEAVE_COMMAND_H_ |
| |
| #include <string> |
| |
| #include <base/values.h> |
| #include <weave/error.h> |
| |
| namespace weave { |
| |
| enum class CommandStatus { |
| kQueued, |
| kInProgress, |
| kPaused, |
| kError, |
| kDone, |
| kCancelled, |
| kAborted, |
| kExpired, |
| }; |
| |
| enum class CommandOrigin { kLocal, kCloud }; |
| |
| class Command { |
| public: |
| // This interface lets the command to notify clients about changes. |
| class Observer { |
| public: |
| virtual void OnResultsChanged() = 0; |
| virtual void OnStatusChanged() = 0; |
| virtual void OnProgressChanged() = 0; |
| virtual void OnCommandDestroyed() = 0; |
| |
| protected: |
| virtual ~Observer() = default; |
| }; |
| |
| // Adds an observer for this command. The observer object is not owned by this |
| // class. |
| virtual void AddObserver(Observer* observer) = 0; |
| |
| // Removes an observer for this command. |
| virtual void RemoveObserver(Observer* observer) = 0; |
| |
| // 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 command status. |
| virtual CommandStatus GetStatus() const = 0; |
| |
| // Returns the origin of the command. |
| virtual CommandOrigin GetOrigin() const = 0; |
| |
| // Returns the command parameters. |
| virtual std::unique_ptr<base::DictionaryValue> GetParameters() const = 0; |
| |
| // Returns the command progress. |
| virtual std::unique_ptr<base::DictionaryValue> GetProgress() const = 0; |
| |
| // Returns the command results. |
| virtual std::unique_ptr<base::DictionaryValue> GetResults() 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; |
| |
| // Updates the command results. The |results| should match the schema. |
| // Returns false if |results| value is incorrect. |
| virtual bool SetResults(const base::DictionaryValue& results, |
| ErrorPtr* error) = 0; |
| |
| // Aborts command execution. |
| virtual void Abort() = 0; |
| |
| // Cancels command execution. |
| virtual void Cancel() = 0; |
| |
| // Marks the command as completed successfully. |
| virtual void Done() = 0; |
| |
| // Returns JSON representation of the command. |
| virtual std::unique_ptr<base::DictionaryValue> ToJson() const = 0; |
| |
| protected: |
| virtual ~Command() = default; |
| }; |
| |
| } // namespace weave |
| |
| #endif // LIBWEAVE_INCLUDE_WEAVE_COMMAND_H_ |