152 lines
5 KiB
C++
152 lines
5 KiB
C++
// Copyright 2015 The Android Open Source Project
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef LIBWEAVED_COMMAND_H_
|
|
#define LIBWEAVED_COMMAND_H_
|
|
|
|
#include <string>
|
|
|
|
#include <base/macros.h>
|
|
#include <binder/Status.h>
|
|
#include <brillo/errors/error.h>
|
|
#include <brillo/value_conversion.h>
|
|
#include <libweaved/export.h>
|
|
#include <utils/StrongPointer.h>
|
|
|
|
namespace android {
|
|
namespace weave {
|
|
class IWeaveCommand;
|
|
} // namespace weave
|
|
} // namespace android
|
|
|
|
namespace weaved {
|
|
|
|
class ServiceImpl;
|
|
|
|
class LIBWEAVED_EXPORT Command final {
|
|
public:
|
|
enum class State {
|
|
kQueued,
|
|
kInProgress,
|
|
kPaused,
|
|
kError,
|
|
kDone,
|
|
kCancelled,
|
|
kAborted,
|
|
kExpired,
|
|
};
|
|
|
|
enum class Origin { kLocal, kCloud };
|
|
|
|
~Command();
|
|
|
|
// Returns the full command ID.
|
|
std::string GetID() const;
|
|
|
|
// Returns the full name of the command.
|
|
std::string GetName() const;
|
|
|
|
// Returns the name of the component this command was sent to.
|
|
std::string GetComponent() const;
|
|
|
|
// Returns the command state.
|
|
Command::State GetState() const;
|
|
|
|
// Returns the origin of the command.
|
|
Command::Origin GetOrigin() const;
|
|
|
|
// Returns the command parameters.
|
|
const base::DictionaryValue& GetParameters() const;
|
|
|
|
// Helper function to get a command parameter of particular type T from the
|
|
// command parameter list. Returns default value for type T (e.g. 0 for int or
|
|
// or "" for std::string) if the parameter with the given name is not found or
|
|
// is of incorrect type.
|
|
template <typename T>
|
|
T GetParameter(const std::string& name) const {
|
|
const base::DictionaryValue& parameters = GetParameters();
|
|
T param_value{};
|
|
const base::Value* value = nullptr;
|
|
if (parameters.Get(name, &value))
|
|
brillo::FromValue(*value, ¶m_value);
|
|
return param_value;
|
|
}
|
|
|
|
// Updates the command progress. The |progress| should match the schema.
|
|
// Returns false if |progress| value is incorrect.
|
|
bool SetProgress(const base::DictionaryValue& progress,
|
|
brillo::ErrorPtr* error);
|
|
|
|
// Sets command into terminal "done" state.
|
|
// Updates the command results. The |results| should match the schema.
|
|
// Returns false if |results| value is incorrect.
|
|
bool Complete(const base::DictionaryValue& results,
|
|
brillo::ErrorPtr* error);
|
|
|
|
// Aborts command execution.
|
|
// Sets command into terminal "aborted" state.
|
|
bool Abort(const std::string& error_code,
|
|
const std::string& error_message,
|
|
brillo::ErrorPtr* error);
|
|
|
|
// Aborts command execution.
|
|
// Sets command into terminal "aborted" state and uses the error information
|
|
// from the |command_error| object. The error codes extracted from
|
|
// |command_error| are automatically prepended with an underscore ("_").
|
|
bool AbortWithCustomError(const brillo::Error* command_error,
|
|
brillo::ErrorPtr* error);
|
|
// AbortWithCustomError overload for specifying the error information as
|
|
// binder::Status.
|
|
bool AbortWithCustomError(android::binder::Status status,
|
|
brillo::ErrorPtr* error);
|
|
|
|
// Cancels command execution.
|
|
// Sets command into terminal "canceled" state.
|
|
bool Cancel(brillo::ErrorPtr* error);
|
|
|
|
// Sets command into paused state.
|
|
// This is not terminal state. Command can be resumed with |SetProgress| call.
|
|
bool Pause(brillo::ErrorPtr* error);
|
|
|
|
// Sets command into error state and assign error.
|
|
// This is not terminal state. Command can be resumed with |SetProgress| call.
|
|
bool SetError(const std::string& error_code,
|
|
const std::string& error_message,
|
|
brillo::ErrorPtr* error);
|
|
|
|
// Sets command into error state and assign error.
|
|
// This is not terminal state. Command can be resumed with |SetProgress| call.
|
|
// Uses the error information from the |command_error| object.
|
|
// The error codes extracted from |command_error| are automatically prepended
|
|
// with an underscore ("_").
|
|
bool SetCustomError(const brillo::Error* command_error,
|
|
brillo::ErrorPtr* error);
|
|
// SetError overload for specifying the error information as binder::Status.
|
|
bool SetCustomError(android::binder::Status status,
|
|
brillo::ErrorPtr* error);
|
|
|
|
protected:
|
|
explicit Command(const android::sp<android::weave::IWeaveCommand>& proxy);
|
|
|
|
private:
|
|
friend class ServiceImpl;
|
|
android::sp<android::weave::IWeaveCommand> binder_proxy_;
|
|
mutable std::unique_ptr<base::DictionaryValue> parameter_cache_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(Command);
|
|
};
|
|
|
|
} // namespace weave
|
|
|
|
#endif // LIBWEAVED_COMMAND_H_
|