#include "requirementItem.h" #include "RequirementManager.h" using namespace std; using namespace core::project; //-------------------------------------------------------------- /* Constructor */ RequirementItem::RequirementItem(RequirementManager &manager, const std::shared_ptr &parentRequirement) : m_requirementManager(manager) { // Initialization metadata.uuid = m_requirementManager.generateUniqueUuid(); // Generate a unique UUID for this requirement item m_parent = parentRequirement; // Set the m_parent requirement item // Register this requirement item in the manager's internal map m_requirementManager.registerRequirement(shared_from_this()); } //-------------------------------------------------------------- /* Append a child requirement item to this requirement item */ void RequirementItem::appendChild(const api::requirement::Requirement &child) { // Create a new requirement item for the child requirement and set this requirement item as its m_parent const auto childItem = make_shared(m_requirementManager); childItem->metadata = child.metadata; childItem->details = child.details; childItem->classification = child.classification; // Prepare requirement links childItem->metadata.uuid = m_requirementManager.generateUniqueUuid(); // Generate a unique UUID for this requirement item childItem->m_parent = shared_from_this(); // Register this requirement item in the manager's internal map m_requirementManager.registerRequirement(childItem); } //-------------------------------------------------------------- /* Remove a child requirement item from this requirement item by its UUID */ void RequirementItem::removeChild(const std::string &childUuid) { // Unregister the child requirement item from the manager's internal map m_requirementManager.unregisterRequirement(childUuid); // Find the child requirement item with the given UUID const auto it = ranges::find_if(m_children, [&childUuid](const RequirementItemPtr &child) { return child->metadata.uuid == childUuid; }); if (it != m_children.end()) m_children.erase(it); // Remove the child requirement item from the vector of children } //-------------------------------------------------------------- /* Get the vector of child requirement items of this requirement item */ std::vector RequirementItem::getChildren() const { return m_children; } //--------------------------------------------------------------