Vaadin 10+ Tree Grid: Hierarchies and how they work?

JoffJoff :

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:

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?

Simon Martinelli :

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);

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=20718&siteId=1