38#include <ocpp/common/database/database_handler_common.hpp>
39#include <ocpp/v2/device_model_storage_interface.hpp>
117 [[nodiscard]]
const char* what()
const noexcept override {
118 return this->reason.c_str();
121 this->reason = std::move(msg);
124 this->reason = std::string(msg);
134 const std::filesystem::path database_path;
136 bool database_exists;
144 InitDeviceModelDb(
const std::filesystem::path& database_path,
const std::filesystem::path& migration_files_path);
165 void initialize_database(
const std::filesystem::path& config_path,
const bool delete_db_if_exists);
178 void execute_init_sql(
const bool delete_db_if_exists);
185 std::vector<std::filesystem::path> get_component_config_from_directory(
const std::filesystem::path& directory);
192 std::map<ComponentKey, std::vector<DeviceModelVariable>>
193 get_all_component_configs(
const std::filesystem::path& directory);
202 void insert_components(
const std::map<
ComponentKey, std::vector<DeviceModelVariable>>& components,
203 const std::map<
ComponentKey, std::vector<DeviceModelVariable>>& existing_components);
210 void insert_component(
const ComponentKey& component_key,
211 const std::vector<DeviceModelVariable>& component_variables);
218 std::map<ComponentKey, std::vector<DeviceModelVariable>>
219 read_component_config(
const std::vector<std::filesystem::path>& components_config_path);
227 std::vector<DeviceModelVariable> get_all_component_properties(
const json& component_properties,
228 std::vector<std::string> required_properties);
237 void insert_variable_characteristics(
const VariableCharacteristics& characteristics,
const int64_t& variable_id);
248 const int64_t& characteristics_id,
const int64_t& variable_id);
268 const uint64_t component_id);
286 void insert_attribute(
const VariableAttribute& attribute,
const uint64_t& variable_id,
287 const std::optional<std::string>& default_actual_value);
297 void insert_attributes(
const std::vector<DbVariableAttribute>& attributes,
const uint64_t& variable_id,
298 const std::optional<std::string>& default_actual_value);
313 void update_attributes(
const std::vector<DbVariableAttribute>& new_attributes,
314 const std::vector<DbVariableAttribute>& db_attributes,
const uint64_t& variable_id,
315 const std::optional<std::string>& default_actual_value);
326 const std::optional<std::string>& default_actual_value);
347 bool insert_variable_attribute_value(
const int64_t& variable_attribute_id,
348 const std::string& variable_attribute_value,
349 const bool warn_source_not_default);
359 void insert_variable_monitors(
const std::vector<VariableMonitoringMeta>& monitors,
const int64_t& variable_id);
364 const int64_t& variable_id);
369 void update_variable_monitors(
const std::vector<VariableMonitoringMeta>& new_monitors,
370 const std::vector<VariableMonitoringMeta>& db_monitors,
const int64_t& variable_id);
380 std::map<ComponentKey, std::vector<DeviceModelVariable>> get_all_components_from_db();
388 std::optional<std::pair<ComponentKey, std::vector<DeviceModelVariable>>>
389 component_exists_in_db(
const std::map<
ComponentKey, std::vector<DeviceModelVariable>>& db_components,
398 bool component_exists_in_config(
const std::map<
ComponentKey, std::vector<DeviceModelVariable>>& component_config,
408 void remove_not_existing_components_from_db(
409 const std::map<
ComponentKey, std::vector<DeviceModelVariable>>& component_config,
410 const std::map<
ComponentKey, std::vector<DeviceModelVariable>>& db_components);
419 bool remove_component_from_db(
const ComponentKey& component);
428 update_component_variables(
const std::pair<
ComponentKey, std::vector<DeviceModelVariable>>& db_component_variables,
429 const std::vector<DeviceModelVariable>& variables);
438 std::vector<DbVariableAttribute> get_variable_attributes_from_db(
const uint64_t& variable_id);
444 std::vector<VariableMonitoringMeta> get_variable_monitors_from_db(
const uint64_t& variable_id);
Definition: database_handler_common.hpp:24
Error class to be able to throw a custom error within the class.
Definition: init_device_model_db.hpp:115
Class to initialize the device model db using the component config files.
Definition: init_device_model_db.hpp:131
InitDeviceModelDb(const std::filesystem::path &database_path, const std::filesystem::path &migration_files_path)
Constructor.
Definition: init_device_model_db.cpp:43
virtual ~InitDeviceModelDb()
Destructor.
Definition: init_device_model_db.cpp:51
virtual void init_sql() override
Init database: set foreign keys on (so when a component is removed or updated, all variables,...
Definition: init_device_model_db.cpp:1144
void initialize_database(const std::filesystem::path &config_path, const bool delete_db_if_exists)
Initialize the database schema and component config.
Definition: init_device_model_db.cpp:55
Class that holds a component.
Definition: init_device_model_db.hpp:48
std::optional< std::string > instance
Component instance.
Definition: init_device_model_db.hpp:51
std::vector< std::string > required
List of required variables.
Definition: init_device_model_db.hpp:54
std::optional< int32_t > evse_id
Component evse id.
Definition: init_device_model_db.hpp:52
std::string name
Component name.
Definition: init_device_model_db.hpp:50
friend bool operator<(const ComponentKey &l, const ComponentKey &r)
operator <, needed to add this class as key in a map.
Definition: init_device_model_db.cpp:1162
std::optional< int32_t > connector_id
Component connector id.
Definition: init_device_model_db.hpp:53
std::optional< uint64_t > db_id
Component id in the database.
Definition: init_device_model_db.hpp:49
Struct that holds a VariableAttribute struct and an database id.
Definition: init_device_model_db.hpp:68
std::optional< std::string > value_source
Source of the attribute value (who set the value).
Definition: init_device_model_db.hpp:70
VariableAttribute variable_attribute
The variable attribute.
Definition: init_device_model_db.hpp:71
std::optional< uint64_t > db_id
The id in the database, if the record is read from the db.
Definition: init_device_model_db.hpp:69
Struct holding the Variable of a device model.
Definition: init_device_model_db.hpp:77
std::optional< std::string > instance
Variable instance.
Definition: init_device_model_db.hpp:91
std::vector< VariableMonitoringMeta > monitors
Config monitors, if any.
Definition: init_device_model_db.hpp:95
VariableCharacteristics characteristics
Variable characteristics.
Definition: init_device_model_db.hpp:85
std::optional< uint64_t > variable_characteristics_db_id
Id from the characteristics in the database, if the records is read from db.
Definition: init_device_model_db.hpp:81
std::string name
Variable name.
Definition: init_device_model_db.hpp:83
std::optional< std::string > source
Source of the variable.
Definition: init_device_model_db.hpp:97
std::optional< std::string > default_actual_value
Default value, if this is set in the component config json.
Definition: init_device_model_db.hpp:93
std::vector< DbVariableAttribute > attributes
Variable attributes.
Definition: init_device_model_db.hpp:87
std::optional< uint64_t > db_id
The id in the database, if the record is read from the db.
Definition: init_device_model_db.hpp:79
bool required
True if variable is required.
Definition: init_device_model_db.hpp:89
Definition: ocpp_types.hpp:701
Definition: ocpp_types.hpp:719