Requirement: Fetch a product given by name and all the materials required to build that product.
Given: A MYSQL table named product_entries with columns like id, product_name, product quantity, material_name, material_quantity.
So for an example let's say to construct 1 table I would need 4 legs, 1 bottom-base, 1 upper-base. And further to construct, 1 bottom-base I would need few bb-part1, bb-part2, and bb-part3, and so on, for upper-base. The entries look likes below:
So, if the user gives a table as an input, he should get a tree that has a table and all the children under it, that is table will have legs, bottom-base, and upper-base; bottom-base will have bb-part1, bb-part2, and bb-part3 under it and upper-base will have ub-part1 under it.
To achieve this, I followed this post where it was given how to construct a tree with N number of children. But the problem that I face is that my ouput only contains elements at level 1.
My logic looks like below:
public void getAllPartsForMaterial(final String partNumber) {
if (partNumber == null || partNumber.trim().isEmpty()) {
throw new IllegalArgumentException("Invalid part number received");
}
Node<ItemDTO> root = new Node<>(ItemDTO.builder().partNumber(partNumber).build());
getParts(root, partNumber);
System.out.println(root.getChildren());
}
private void getParts(Node<ItemDTO> root, final String partNumber) {
List<Material> materials = materialRepository
.findAllByProduct(partNumber);
if(!materials.isEmpty()) {
materials.forEach(material -> {
Node<ItemDTO> child = new Node<>(ItemDTO.builder()
.partNumber(material.getMaterial())
.quantity(material.getMaterialQuantity())
.build());
root.addChild(child);
getParts(child, material.getMaterial());
});
}
}
So my output is like:
[Node{data=ItemDTO(partNumber=legs, quantity=4.0)}, Node{data=ItemDTO(partNumber=bottom-base, quantity=1.0)}]
How can add all elements in this tree, can someone tell what am I missing?