@Override
    public MenuItem getAllMenuItem() {
        Menu root = getRoot();
        MenuItem itemRoot = new MenuItem(root);

        if (!root.getMenuChildren().isEmpty()) {
            itemRoot.setChildren(new ArrayList<MenuItem>());
            for (Menu m1 : root.getMenuChildren()) {
                MenuItem mi1 = new MenuItem(m1);
                itemRoot.getChildren().add(mi1);

                if (!m1.getMenuChildren().isEmpty()) {
                    mi1.setChildren(new ArrayList<MenuItem>());
                    for (Menu m2 : m1.getMenuChildren()) {
                        MenuItem mi2 = new MenuItem(m2);
                        mi1.getChildren().add(mi2);

                        if (!m2.getMenuChildren().isEmpty()) {
                            mi2.setChildren(new ArrayList<MenuItem>());
                            for (Menu m3 : m2.getMenuChildren()) {
                                MenuItem mi3 = new MenuItem(m3);

                                mi2.getChildren().add(mi3);
                            }
                        }
                    }
                }
            }
        }

        return itemRoot;
    }