Files
kwa.fr/src/core/projectManager/RequirementManager.cpp
2026-03-13 10:23:40 +01:00

73 lines
3.5 KiB
C++

#include "RequirementManager.h"
#include "requirementItem.h"
#include <sdi_toolBox/generic/uuid.h>
using namespace std;
using namespace core::project;
//--------------------------------------------------------------
/* Default constructor */
RequirementManager::RequirementManager()
{
m_rootRequirement = make_shared<RequirementItem>(*this); // Create the root requirement item and set it as the root requirement
}
//--------------------------------------------------------------
/* Get the root requirement */
RequirementManager::RequirementItemPtr RequirementManager::getRootRequirement() const
{
return m_rootRequirement; // Return the root requirement item pointer
}
//--------------------------------------------------------------
/* Get the vector of child requirement items of the root requirement */
std::vector<RequirementManager::RequirementItemPtr> RequirementManager::getRootRequirementChild() const
{
return m_rootRequirement->getChildren(); // Return the vector of child requirement items of the root requirement
}
//--------------------------------------------------------------
/* Get a requirement by its UUID */
RequirementManager::RequirementItemPtr RequirementManager::getRequirement(const std::string &uuid) const
{
if (m_requirementsByUuid.contains(uuid))
return m_requirementsByUuid.at(uuid); // Return the requirement item pointer if found in the map
return {}; // Return nullptr if the requirement with the given UUID is not found
}
//--------------------------------------------------------------
/* Get the vector of child requirement items of a requirement by its UUID */
std::vector<RequirementManager::RequirementItemPtr> RequirementManager::getRequirementChildren(const std::string &uuid) const
{
if (m_requirementsByUuid.contains(uuid))
return m_requirementsByUuid.at(uuid)->getChildren(); // Return the vector of child requirement items if the requirement with the given UUID is found in the map
return {}; // Return an empty vector if the requirement with the given UUID is not found
}
//--------------------------------------------------------------
/* Generate a unique UUID string that is not already registered in the manager's internal map */
std::string RequirementManager::generateUniqueUuid() const
{
std::string uuid;
do
{
uuid = sdi_toolBox::generic::UuidGenerator::uuid_v4(); // Generate a random UUID v4 string
} while (isRequirementRegistered(uuid)); // Check if the generated UUID is already registered
return uuid; // Return the unique UUID string
}
//--------------------------------------------------------------
/* Check if a requirement with the given UUID is registered in the manager's internal map */
bool RequirementManager::isRequirementRegistered(const std::string &uuid) const
{
return m_requirementsByUuid.contains(uuid);
}
//--------------------------------------------------------------
/* Register a requirement in the manager's internal map for quick lookup by UUID */
void RequirementManager::registerRequirement(const RequirementItemPtr &requirement)
{
m_requirementsByUuid[requirement->metadata.uuid] = requirement;
}
//--------------------------------------------------------------
/* Unregister a requirement from the manager's internal map */
void RequirementManager::unregisterRequirement(const std::string &uuid)
{
m_requirementsByUuid.erase(uuid);
}
//--------------------------------------------------------------