61 lines
2.2 KiB
C++
61 lines
2.2 KiB
C++
#ifndef COMDEL_VALIDATOR_H
|
|
#define COMDEL_VALIDATOR_H
|
|
|
|
#include "instance.h"
|
|
#include "schema.h"
|
|
#include "library.h"
|
|
|
|
namespace domain {
|
|
|
|
struct ValidationError {
|
|
ComponentInstance *instance;
|
|
InstanceAttribute *attribute;
|
|
Action::ActionType type;
|
|
std::string message;
|
|
|
|
ValidationError(Action::ActionType type, std::string message): instance(nullptr), attribute(nullptr), type(type), message(message) {}
|
|
|
|
ValidationError(ComponentInstance* instance, InstanceAttribute* attribute, Action::ActionType type, std::string message): instance(instance), attribute(attribute), type(type), message(message) {}
|
|
};
|
|
|
|
struct ValidationContext {
|
|
ComponentInstance *instance;
|
|
InstanceAttribute *attribute;
|
|
std::map<std::string, AddressSpace> addressSpaces;
|
|
std::map<std::string, Value> attributes;
|
|
};
|
|
|
|
class ComdelValidator {
|
|
public:
|
|
std::vector<ValidationError> validateSchema(Schema &schema, ValidationContext context);
|
|
|
|
std::vector<ValidationError> validateComponent(ComponentInstance *instance, ValidationContext context);
|
|
|
|
std::vector<ValidationError> validateAttribute(InstanceAttribute *attribute, ValidationContext context);
|
|
|
|
std::optional<ValidationError> validateRule(Rule rule, ValidationContext context);
|
|
|
|
std::vector<ValidationError> validateMemoryReferences(Schema &schema, Library &library, ValidationContext context);
|
|
|
|
std::vector<ValidationError> validateInstanceNames(Schema &schema, Library &library, ValidationContext context);
|
|
|
|
std::vector<ValidationError> validateInstanceCount(Schema &schema, Library &library, ValidationContext context);
|
|
|
|
std::vector<ValidationError>
|
|
validatePinConnections(Schema &schema, Library &library, ValidationContext context);
|
|
|
|
ComdelValidator(std::vector<FunctionValidator *> validators);
|
|
|
|
private:
|
|
std::map<std::string, FunctionValidator *> validators;
|
|
|
|
std::string populateMessage(string message, ValidationContext context);
|
|
|
|
string replacePlaceholder(string message, const string name, Value value);
|
|
|
|
bool connectionExists(Schema &schema, shared_ptr<ComponentInstance> &component, Pin &pin);
|
|
};
|
|
|
|
}
|
|
#endif //COMDEL_VALIDATOR_H
|