I have been trying to do a Vaadin tree grid with a more complex hierarchy. Since the documentation for this framework is very obscure and feels tad incomplete, I found this blog thread that helped me out only to get multiple children to a single parent.
However, I want to have a much more complex system where the children would have their own branches (children of children?).
For example:
So now I am stuck with this bit of code and I am unsure if I am going the right way or not.
TreeGrid<TreeDto> grid = new TreeGrid<>(TreeDto.class);
grid.setHierarchyColumn("name");
List<TreeDto> parenlist = new ArrayList<TreeDto>();
List<TreeDto> childList = new ArrayList<TreeDto>();
for(DataDepartment department : departmentLists)
{
TreeDto parent = new TreeDto(department.getDepName(), null);
for(DataGeneralSection section: sectionList)
{
childList.add(new TreeDto(section.getSection(), parent));
}
parenlist.add(parent);
}
List<TreeDto> newList = new ArrayList<TreeDto>(parenlist);
newList.addAll(childList);
newList.forEach(p -> grid.getTreeData().addItem(p.getParent(), p));
abteilungenTabs.add(grid);
Does anybody have any idea how I can achieve the hierarchy I want?
You must use a HierachicalDataProvider that provides the data.
For example:
dataProvider = new AbstractBackEndHierarchicalDataProvider<>() {
@Override
public int getChildCount(HierarchicalQuery<TreeNode, Void> hierarchicalQuery) {
if (hierarchicalQuery.getParent() == null) {
if (root == null) {
return 0;
} else {
return root.getChildren().size();
}
} else {
return hierarchicalQuery.getParent().getChildren().size();
}
}
@Override
public boolean hasChildren(TreeNode treeNode) {
return !treeNode.getChildren().isEmpty();
}
@Override
protected Stream<TreeNode> fetchChildrenFromBackEnd(HierarchicalQuery<TreeNode, Void> hierarchicalQuery) {
if (hierarchicalQuery.getParent() == null) {
if (root == null) {
return Stream.empty();
} else {
return root.getChildren().stream().skip(hierarchicalQuery.getOffset()).limit(hierarchicalQuery.getLimit());
}
} else {
return hierarchicalQuery.getParent().getChildren().stream().skip(hierarchicalQuery.getOffset()).limit(hierarchicalQuery.getLimit());
}
}
};
treeGrid.setDataProvider(dataProvider);