##// END OF EJS Templates
Updates model after an event has been created through the colored zone
Updates model after an event has been created through the colored zone

File last commit:

r1254:197bf740d8a6
r1262:99c1ba5e139b
Show More
FuzzingOperations.cpp
74 lines | 2.4 KiB | text/x-c | CppLexer
/ plugins / amda / tests / FuzzingOperations.cpp
#include "FuzzingOperations.h"
#include "FuzzingUtils.h"
#include <Data/IDataProvider.h>
#include <Variable/Variable.h>
#include <Variable/VariableController.h>
#include <QUuid>
Q_LOGGING_CATEGORY(LOG_FuzzingOperations, "FuzzingOperations")
namespace {
struct CreateOperation : public IFuzzingOperation {
bool canExecute(std::shared_ptr<Variable> variable) const override
{
// A variable can be created only if it doesn't exist yet
return variable == nullptr;
}
void execute(std::shared_ptr<Variable> &variable, VariableController &variableController,
const Properties &properties) const override
{
// Retrieves metadata pool from properties, and choose one of the metadata entries to
// associate it with the variable
auto metaDataPool = properties.value(METADATA_POOL_PROPERTY).value<MetadataPool>();
auto variableMetadata = RandomGenerator::instance().randomChoice(metaDataPool);
// Retrieves provider
auto variableProvider
= properties.value(PROVIDER_PROPERTY).value<std::shared_ptr<IDataProvider> >();
auto variableName = QString{"Var_%1"}.arg(QUuid::createUuid().toString());
qCInfo(LOG_FuzzingOperations()) << "Creating variable" << variableName
<< "(metadata:" << variableMetadata << ")";
auto newVariable
= variableController.createVariable(variableName, variableMetadata, variableProvider);
std::swap(variable, newVariable);
}
};
struct UnknownOperation : public IFuzzingOperation {
bool canExecute(std::shared_ptr<Variable> variable) const override
{
Q_UNUSED(variable);
return false;
}
void execute(std::shared_ptr<Variable> &variable, VariableController &variableController,
const Properties &properties) const override
{
Q_UNUSED(variable);
Q_UNUSED(variableController);
Q_UNUSED(properties);
// Does nothing
}
};
} // namespace
std::unique_ptr<IFuzzingOperation> FuzzingOperationFactory::create(FuzzingOperationType type)
{
switch (type) {
case FuzzingOperationType::CREATE:
return std::make_unique<CreateOperation>();
default:
// Default case returns unknown operation
break;
}
return std::make_unique<UnknownOperation>();
}