57 lines
2.6 KiB
C++
57 lines
2.6 KiB
C++
#include "requirementItem.h"
|
|
|
|
#include "RequirementManager.h"
|
|
|
|
using namespace std;
|
|
using namespace core::project;
|
|
//--------------------------------------------------------------
|
|
/* Constructor */
|
|
RequirementItem::RequirementItem(RequirementManager &manager, const std::shared_ptr<RequirementItem> &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<RequirementItem>(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::RequirementItemPtr> RequirementItem::getChildren() const
|
|
{
|
|
return m_children;
|
|
}
|
|
//--------------------------------------------------------------
|